Bug Summary

File:src/continua.cc
Warning:line 23822, column 24
The right operand of '+' is a garbage value

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name continua.cc -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=osx -analyzer-checker=deadcode -analyzer-checker=cplusplus -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-sdk-version=10.14 -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 409.12 -resource-dir /opt/local/libexec/llvm-8.0/lib/clang/8.0.0 -isystem /Users/u237002/Dropbox/Hacking/sat/arts/3rdparty -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -D HAVE_CONFIG_H -I /Users/u237002/Hacking/arts-build/clang-analyze/src -I /Users/u237002/Dropbox/Hacking/sat/arts/src -I /opt/local/include -I /Users/u237002/Dropbox/Hacking/sat/arts/3rdparty/invlib/src -I/usr/local/include -stdlib=libc++ -internal-isystem /opt/local/libexec/llvm-8.0/bin/../include/c++/v1 -O2 -Wno-sign-conversion -Wno-unknown-pragmas -Wno-return-type-c-linkage -Wno-strict-overflow -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /Users/u237002/Hacking/arts-build/clang-analyze/src -ferror-limit 19 -fmessage-length 0 -fvisibility hidden -fvisibility-inlines-hidden -I/opt/local/include/libomp -fopenmp -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -vectorize-loops -vectorize-slp -analyzer-output=html -o /Users/u237002/Hacking/arts-build/clang-analyze/report/2019-07-09-141316-24977-1 -x c++ /Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc
1/* Copyright (C) 2001-2012
2 Thomas Kuhn <tkuhn@uni-bremen.de>
3 Stefan Buehler <sbuehler@ltu.se>
4
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 2, or (at your option) any
8 later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18 USA. */
19
20/**
21 \file continua.cc
22
23 Continuum absorption models.
24
25 This is the file from arts-1-0, back-ported to arts-1-1.
26
27 \retval pxsec <b>Internal functions:</b> Return pseudo absorption cross
28 sections, defined such that the absorption coefficient
29 \f$\alpha\f$ (in units of 1/m) is:<br>
30 \f$\alpha\f$ = pxsec * VMR.<br>
31 \retval xsec <b>xsec_continuum_tag:</b> Now returns true abosorption
32 cross sections, defined such that the
33 absorption coefficient \f$\alpha\f$ (in units of 1/m) is:<br>
34 \f$\alpha\f$ = xsec * n* VMR, where n is the total
35 number density.<br>
36
37 The absorption model functions add absorption to xsec/pxsec,
38 rather than replacing the previous content.
39
40 <H3>The following full water vapor models are implemented:</H3><br>
41 <ol>
42 <li><b>H2O-MPM87</b> absorption model (line and continuum) according to <br>
43 H. J. Liebe,<br>
44 <i>A contribution to modeling atmospheric millimeter-wave properties</i>,<br>
45 Frequenz, 41, 1987, 31-36<br>
46 and<br>
47 H. J. Liebe and D. H. Layton,<br>
48 <i>Millimeter-wave properties of the atmosphere:
49 Laboratory studies and propagation modeling</i>,<br>
50 U.S. Dept. of Commerce, National Telecommunications and Information
51 Administration, Institute for Communication Sciences,<br>
52 325 Broadway, Boulder, CO 80303-3328, report 87224.
53 </li>
54 <li><b>H2O-MPM89</b> absorption model (line and continuum) according to <br>
55 H. J. Liebe,<br> Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631.
56 </li>
57 <li><b>H2O-MPM93</b> absorption model (line and continuum) according to <br>
58 H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
59 <i>Propagation modeling of moist air and suspended water/ice
60 particles at frequencies below 1000 GHz</i>,<br>
61 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
62 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
63 <a href="ftp://ftp.its.bldrdoc.gov/pub/mpm93/">(WWW access)</a>.
64 </li>
65 <li><b>H2O-CP98</b> absorption model (line and continuum) according to <br>
66 S. L. Cruz-Pol et al.,<br> Radio Science, 33(5), 1319, 1998
67 <a href="http://ece.uprm.edu/~pol/Atmosphere.html">(WWW access)</a>.
68 </li>
69 <li><b>H2O-PWR98</b> absorption model (line and continuum) according to <br>
70 P. W. Rosenkranz,<br>
71 Radio Science, 33(4), 919, 1998 and<br>
72 Radio Science, 34(4), 1025, 1999
73 <a href="ftp://mesa.mit.edu/phil/lbl_rt">(WWW access)</a>.
74 </li>
75 </ol>
76 <br>
77 <br>
78 <br>
79 <br>
80 <H3>The following full oxygen models are implemented:</H3><br>
81 <ol>
82 <li><b>O2-MPM93</b> absorption model (line and continuum) according to <br>
83 H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
84 <i>Propagation modeling of moist air and suspended water/ice
85 particles at frequencies below 1000 GHz</i>,<br>
86 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
87 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
88 <a href="ftp://ftp.its.bldrdoc.gov/pub/mpm93/">(WWW access)</a>.
89 </li>
90 <li><b>O2-PWR93</b> absorption model (line and continuum) according to <br>
91 P. W. Rosenkranz,<br> Chapter 2, in M. A. Janssen, <br>
92 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
93 John Wiley & Sons, Inc., 1993
94 <a href="ftp://mesa.mit.edu/phil/lbl_rt">(WWW access)</a>.
95 </li>
96 </ol>
97 <br>
98 <br>
99 <br>
100 <br>
101 <H3>The following continuum parameterizations are implemented:</H3><br>
102 <ol>
103 <li><b>H2O-H2O (H2O-SelfContStandardType)</b>:<br>
104 P. W. Rosenkranz,<br>
105 Radio Science, Vol. 33, No 4, Pages 919-928, 1998 and <br>
106 Radio Science, Vol. 34, No 4, Page 1025, 1999
107 <a href="ftp://mesa.mit.edu/phil/lbl_rt">(WWW access)</a>.
108 </li>
109 <li><b>H2O-H2O (H2O-SelfContCKD222)</b>:<br>
110 CKDv2.2.2 H2O self continuum from the FORTRAN77 code written by<br>
111 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
112 Environmental Research Inc. (AER),</a><br>
113 Radiation and Climate Group<br>
114 131 Hartwell Avenue<br>
115 Lexington, MA 02421, USA
116 </li>
117 <li><b>H2O-H2O (H2O-SelfContCKD242)</b>:<br>
118 CKDv2.4.2 H2O self continuum from the FORTRAN77 code written by<br>
119 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
120 Environmental Research Inc. (AER),</a><br>
121 Radiation and Climate Group<br>
122 131 Hartwell Avenue<br>
123 Lexington, MA 02421, USA
124 </li>
125 <li><b>H2O-H2O (H2O-SelfContCKDMT100)</b>:<br>
126 CKD_MTv1.00 H2O self continuum from the FORTRAN77 code written by<br>
127 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
128 Environmental Research Inc. (AER),</a><br>
129 Radiation and Climate Group<br>
130 131 Hartwell Avenue<br>
131 Lexington, MA 02421, USA
132 </li>
133 <li><b>H2O-H2O (H2O-SelfContCKDMT252)</b>:<br>
134 CKD_MTv2.50 H2O self continuum from the FORTRAN77 code written by<br>
135 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
136 Environmental Research Inc. (AER),</a><br>
137 Radiation and Climate Group<br>
138 131 Hartwell Avenue<br>
139 Lexington, MA 02421, USA
140 </li>
141 <li><b>H2O-H2O (H2O-SelfContCKDMT320)</b>:<br>
142 CKD_MTv3.20 H2O self continuum from the FORTRAN77 code written by<br>
143 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
144 Environmental Research Inc. (AER),</a><br>
145 Radiation and Climate Group<br>
146 131 Hartwell Avenue<br>
147 Lexington, MA 02421, USA
148 </li>
149 <li><b>H2O-air (H2O-ForeignContStandardType)</b>: <br>
150 P. W. Rosenkranz,<br>
151 Radio Science, Vol. 33, No 4, Pages 919-928, 1998 and <br>
152 Radio Science, Vol. 34, No 4, Page 1025, 1999
153 <a href="ftp://mesa.mit.edu/phil/lbl_rt">(WWW access)</a>.
154 </li>
155 <li><b>H2O-air (H2O-foreignContCKD222)</b>:<br>
156 CKDv2.2.2 H2O foreign continuum from the FORTRAN77 code written by<br>
157 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
158 Environmental Research Inc. (AER),</a><br>
159 Radiation and Climate Group<br>
160 131 Hartwell Avenue<br>
161 Lexington, MA 02421, USA
162 </li>
163 <li><b>H2O-air (H2O-foreignContCKD242)</b>:<br>
164 CKDv2.4.2 H2O foreign continuum from the FORTRAN77 code written by<br>
165 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
166 Environmental Research Inc. (AER),</a><br>
167 Radiation and Climate Group<br>
168 131 Hartwell Avenue<br>
169 Lexington, MA 02421, USA
170 </li>
171 <li><b>H2O-air (H2O-foreignContCKDMT100)</b>:<br>
172 CKD_MTv1.00 H2O foreign continuum from the FORTRAN77 code written by<br>
173 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
174 Environmental Research Inc. (AER),</a><br>
175 Radiation and Climate Group<br>
176 131 Hartwell Avenue<br>
177 Lexington, MA 02421, USA
178 </li>
179 <li><b>H2O-air (H2O-foreignContCKDMT252)</b>:<br>
180 CKD_MTv2.50 H2O foreign continuum from the FORTRAN77 code written by<br>
181 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
182 Environmental Research Inc. (AER),</a><br>
183 Radiation and Climate Group<br>
184 131 Hartwell Avenue<br>
185 Lexington, MA 02421, USA
186 </li>
187 <li><b>H2O-air (H2O-foreignContCKDMT320)</b>:<br>
188 CKD_MTv3.20 H2O foreign continuum from the FORTRAN77 code written by<br>
189 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
190 Environmental Research Inc. (AER),</a><br>
191 Radiation and Climate Group<br>
192 131 Hartwell Avenue<br>
193 Lexington, MA 02421, USA
194 </li>
195 <li><b>H2O-air (H2O-ForeignContMaTippingType)</b>: <br>
196 Q. Ma and R. H. Tipping,<br>
197 J. Chem. Phys., 117(23), 10581, 2002.<br>
198 </li>
199 <li><b>H2O-air (H2O-ContMPM93)</b>:<br>
200 H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
201 <i>Propagation modeling of moist air and suspended water/ice<br>
202 particles at frequencies below 1000 GHz</i>,<br>
203 AGARD 52nd Specialists Meeting of the Electromagnetic Wave<br>
204 Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
205 <a href="ftp://ftp.its.bldrdoc.gov/pub/mpm93/">(WWW access)</a>.
206 </li>
207 <li><b>O2-air (O2-SelfContStandardType)</b>:<br>
208 P. W. Rosenkranz,<br>
209 Chapter 2, in M. A. Janssen, <br>
210 <i>Atmospheric Remote Sensing by Microwave Radiometry</i>,
211 John Wiley & Sons, Inc., 1993
212 <a href="ftp://mesa.mit.edu/phil/lbl_rt">(WWW access)</a>.<br>
213 and also described in<br>
214 H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
215 <i>Propagation modeling of moist air and suspended water/ice<br>
216 particles at frequencies below 1000 GHz</i>,<br>
217 AGARD 52nd Specialists Meeting of the Electromagnetic Wave<br>
218 Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
219 <a href="ftp://ftp.its.bldrdoc.gov/pub/mpm93/">(WWW access)</a>.
220 </li>
221 <li><b>O2-air (O2-CIAfunCKDMT100)</b>:<br>
222 CKD_MT version 1.00 O2 CIA fundamental band from the FORTRAN77 code written by<br>
223 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
224 Environmental Research Inc. (AER),</a><br>
225 Radiation and Climate Group<br>
226 131 Hartwell Avenue<br>
227 Lexington, MA 02421, USA
228 </li>
229 <li><b>O2-air (O2-v0v0CKDMT100)</b>:<br>
230 CKD_MT version 1.00 O2 band absorption model for the \f$a^1\Delta_g\f$
231 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
232 \f$X^3\Sigma^-_g\f$ band system
233 (\f$\nu=0\f$
234 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
235 \f$\nu=0\f$
236 transitions around 1.27 microns).<br>
237 Source code from the FORTRAN77 code written by<br>
238 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
239 Environmental Research Inc. (AER),</a><br>
240 Radiation and Climate Group<br>
241 131 Hartwell Avenue<br>
242 Lexington, MA 02421, USA
243 </li>
244 <li><b>O2-air (O2-v1v0CKDMT100)</b>:<br>
245 CKD_MT version 1.00 O2 band absorption model for the \f$a^1\Delta_g\f$
246 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
247 \f$X^3\Sigma^-_g\f$ band system
248 (\f$\nu=1\f$
249 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
250 \f$\nu=0\f$
251 transitions around 1.06 microns).<br>
252 Source code from the FORTRAN77 code written by<br>
253 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
254 Environmental Research Inc. (AER),</a><br>
255 Radiation and Climate Group<br>
256 131 Hartwell Avenue<br>
257 Lexington, MA 02421, USA
258 </li>
259 <li><b>N2-N2 (N2-SelfContStandardType)</b>:<br>
260 P. W. Rosenkranz,<br>
261 Chapter 2, in M. A. Janssen, <br>
262 <i>Atmospheric Remote Sensing by Microwave Radiometry</i>,
263 John Wiley & Sons, Inc., 1993
264 <a href="ftp://mesa.mit.edu/phil/lbl_rt">(WWW access)</a>.
265 </li>
266 <li><b>N2-N2 (N2-SelfContMPM93)</b>:<br>
267 H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
268 <i>Propagation modeling of moist air and suspended water/ice<br>
269 particles at frequencies below 1000 GHz</i>,<br>
270 AGARD 52nd Specialists Meeting of the Electromagnetic Wave<br>
271 Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
272 <a href="ftp://ftp.its.bldrdoc.gov/pub/mpm93/">(WWW access)</a>.
273 </li>
274 <li><b>N2-N2 (N2-CIArotCKDMT100)</b>:<br>
275 CKD_MT version 1.00 N2-N2 CIA rotational band absorption model.<br>
276 Source code from the FORTRAN77 code written by<br>
277 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
278 Environmental Research Inc. (AER),</a><br>
279 Radiation and Climate Group<br>
280 131 Hartwell Avenue<br>
281 Lexington, MA 02421, USA
282 <li><b>N2-N2 (N2-CIAfunCKDMT100)</b>:<br>
283 CKD_MT version 1.00 N2-N2 CIA fundamental band absorption model.<br>
284 Source code from the FORTRAN77 code written by<br>
285 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
286 Environmental Research Inc. (AER),</a><br>
287 Radiation and Climate Group<br>
288 131 Hartwell Avenue<br>
289 Lexington, MA 02421, USA
290 </li>
291 <li><b>CO2-CO2 (CO2-SelfContPWR93)</b>:<br>
292 P. W. Rosenkranz,<br>
293 Chapter 2, in M. A. Janssen, <br>
294 <i>Atmospheric Remote Sensing by Microwave Radiometry</i>,
295 John Wiley & Sons, Inc., 1993
296 <a href="ftp://mesa.mit.edu/phil/lbl_rt">(WWW access)</a>.
297 </li>
298 <li><b>CO2-N2 (CO2-ForeignContPWR93)</b>: <br>
299 P. W. Rosenkranz,<br>
300 Chapter 2, in M. A. Janssen, <br>
301 <i>Atmospheric Remote Sensing by Microwave Radiometry</i>,
302 John Wiley & Sons, Inc., 1993
303 <a href="ftp://mesa.mit.edu/phil/lbl_rt">(WWW access)</a>.
304 </li>
305 <li><b>CO2-CO2 (CO2-SelfContHo66)</b>:<br>
306 Ho, Kaufman and Thaddeus,<br>
307 Laboratory Measurements of microwave absorption in models of the
308 atmosphere of Venus"<br>
309 JGR, 1966.
310 </li>
311 <li><b>CO2-N2 (CO2-ForeignContHo66)</b>: <br>
312 Ho, Kaufman and Thaddeus,<br>
313 Laboratory Measurements of microwave absorption in models of the
314 atmosphere of Venus"<br>
315 JGR, 1966.
316 </li>
317 <li><b>CO2-air (CO2-CKD241)</b>:<br>
318 CKDv2.4.1 CO2 continuum from the FORTRAN77 code written by<br>
319 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
320 Environmental Research Inc. (AER),</a><br>
321 Radiation and Climate Group<br>
322 131 Hartwell Avenue<br>
323 Lexington, MA 02421, USA
324 </li>
325 <li><b>CO2-air (CO2-CKDMT100)</b>:<br>
326 CKD_MT version 1.00 CO2 continuum from the FORTRAN77 code written by<br>
327 <a href="http://www.rtweb.aer.com/continuum_frame.html">Atmospheric and
328 Environmental Research Inc. (AER),</a><br>
329 Radiation and Climate Group<br>
330 131 Hartwell Avenue<br>
331 Lexington, MA 02421, USA
332 </li>
333 </ol>
334 <br>
335 <br>
336 <br>
337 <br>
338 <H3>The following cloud absorption models are implemented:</H3><br>
339 <ol>
340 <li><b>Suspended water droplet (liquidcloud-MPM93)</b>
341 absorption parameterization from MPM93 model<br>
342 H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
343 <i>Propagation modeling of moist air and suspended water/ice
344 particles at frequencies below 1000 GHz</i>,<br>
345 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
346 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
347 <a href="ftp://ftp.its.bldrdoc.gov/pub/mpm93/">(WWW access)</a>.
348 </li>
349 <li><b>Suspended water droplet (liquidcloud-ELL07)</b>
350 absorption parameterization from ELL07 model<br>
351 W. J. Ellison <br>
352 <i>Permittivity of Pure Water, at Standard Atmospheric Pressure, over the
353 Frequency Range 0-25 THz and Temperature Range 0-100C</i>,<br>
354 J. Phys. Chem. Ref. Data, Vol. 36, No. 1, 2007
355 </li
356
357 <li><b>Ice crystal absorption (icecloud-MPM93)</b> parameterization from MPM93 model<br>
358 H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
359 <i>Propagation modeling of moist air and suspended water/ice
360 particles at frequencies below 1000 GHz</i>,<br>
361 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
362 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
363 <a href="ftp://ftp.its.bldrdoc.gov/pub/mpm93/">(WWW access)</a>.
364 </li>
365 </ol>
366<br>
367<br>
368
369 <b>The following unit conversions are used for the implemented models:</b><br>
370 (SI units: meter, kilogram, second, ampere, Kelvin, candela)<br>
371
372 \verbatim
373
374 x g/cm^3 = y kg/m^3 <===> y = x * 1.00e3
375 x g/m^3 = y kg/m^3 <===> y = x * 1.00e-3
376 x GHz = y Hz <===> y = x * 1.00e9
377 x 1/GHz = y 1/Hz <===> y = x * 1.00e-9
378 x hPa = y Pa <===> y = x * 1.00e2
379 x 1/hPa = y 1/Pa <===> y = x * 1.00e-2
380 x 1/cm = y 1/m <===> y = x * 1.0e2
381 x 1/km = y 1/m <===> y = x * 1.00e-3
382 x dB = y Np <===> y = x / [10.0 * log10(e)]
383 x dB/km = y 1/m <===> y = x * 1.00e-3 / [10.0 * log10(e)]
384 x Np/km = y 1/m <===> y = x * 1.00e-3
385
386 and especially for the MPM model versions:
387
388 (4 * pi / c) * 10 * log(e) = 0.1820 * 10^6 dB/km/GHz
389 = 0.1820 * 10^-6 dB/m/Hz
390 \endverbatim
391
392<br>
393
394 \author Thomas Kuhn
395 \date 2003-11-19
396
397*/
398
399#include <cmath>
400#include "arts.h"
401#include "matpackI.h"
402#include "array.h"
403#include "absorption.h"
404#include "continua.h"
405#include "global_data.h"
406
407
408// #################################################################################
409
410// global constants as defined in constants.cc
411
412extern const Numeric EULER_NUMBER;
413extern const Numeric LOG10_EULER_NUMBER;
414extern const Numeric NAT_LOG_TEN;
415extern const Numeric PI;
416extern const Numeric SPEED_OF_LIGHT;
417extern const Numeric DENSITY_OF_WATER;
418
419const Numeric LIQUID_AND_ICE_TREAT_AS_ZERO = 1e-10;
420
421// numerical constants specific defined for the file continua.cc
422
423// conversion from neper to decibel:
424//const Numeric Np_to_dB = (10.000000 * LOG10_EULER_NUMBER); // [dB/Np]
425// conversion from decibel to neper:
426//const Numeric dB_to_Np = (1.000000 / Np_to_dB); // [Np/dB]
427// conversion from GHz to Hz:
428//const Numeric GHz_to_Hz = 1.000000e9; // [Hz/GHz]
429// conversion from Hz to GHz:
430const Numeric Hz_to_GHz = 1.000000e-9; // [GHz/Hz]
431// conversion from kPa to Pa:
432//const Numeric kPa_to_Pa = 1.000000e3; // [kPa/Pa]
433// conversion from Pa to kPa:
434const Numeric Pa_to_kPa = 1.000000e-3; // [Pa/kPa]
435// conversion from hPa to Pa (hPa = mbar):
436//const Numeric hPa_to_Pa = 1.000000e2; // [hPa/Pa]
437// conversion from Pa to hPa (hPa = mbar):
438const Numeric Pa_to_hPa = 1.000000e-2; // [Pa/hPa]
439
440// MPM pre-factor for unit setting:
441//const Numeric dB_m_Hz = 0.1820427855916028e-06; // [dB/m/Hz] (4 * pi / c) * 10 * log(e)
442//const Numeric dB_km_GHz = 0.1820427855916028e+06; // [dB/km/GHz] (4 * pi / c) * 10 * log(e)
443
444
445// absorption unit conversions
446
447// conversion from dB/km to Np/km for absorption units:
448//const Numeric dB_km_to_Np_km = dB_to_Np;
449// conversion from dB/km to Np/m for absorption units:
450//const Numeric dB_km_to_Np_m = (1.00000e-3 / (10.0 * LOG10_EULER_NUMBER));
451// conversion from dB/km to 1/m for absorption units:
452const Numeric dB_km_to_1_m = (1.00000e-3 / (10.0 * LOG10_EULER_NUMBER));
453
454
455// lower limit for absorption calculation due to underflow error:
456
457const Numeric VMRCalcLimit = 1.000e-25;
458
459
460////////////////////////////////////////////////////////////////////////////
461// arrays of the CKD H2O, CO2, N2, O2 absorption models
462////////////////////////////////////////////////////////////////////////////
463
464// additional array fields due to different numbering schemes of F77 and C/C++
465const int addF77fields = 1;
466
467
468////////////////////////////////////////////////////////////////////////////
469// Continuum data constants
470////////////////////////////////////////////////////////////////////////////
471
472/*
473 ---------------------------------------------------------------------
474
475c 29 August 2002
476c
477c This version, ckd_2.4.2, is composed of the updates to all continua
478c including water vapor (ckd_2.2). This is to retain consistency between the
479c continuum and the HITRAN line parameters.
480c
481
482 further information can be found under
483 http://www.rtweb.aer.com/continuum_frame.html
484
485 Transformation from original F77 code to C/C++ by
486 T. Kuhn, iup Bremen, October 2003
487
488 ---------------------------------------------------------------------
489 */
490// H2O self continuum parameters at T=296 K for the CKD versions 0 to 2.4.2
491// date of last update: 06/28/82
492// units of (CM**3/MOL)*1.E-20
493const Numeric SL296_ckd_0_v1 = -20.0;
494const Numeric SL296_ckd_0_v2 = 20000.0;
495const Numeric SL296_ckd_0_dv = 10.0;
496const int SL296_ckd_0_npt = 2003;
497const double SL296_ckd_0[SL296_ckd_0_npt+addF77fields] = {
498 0.0000e-00, 1.1109e-01, 1.0573e-01,
499 1.0162e-01, 1.0573e-01, 1.1109e-01, 1.2574e-01, 1.3499e-01, // f02740
500 1.4327e-01, 1.5065e-01, 1.5164e-01, 1.5022e-01, 1.3677e-01, // f02750
501 1.3115e-01, 1.2253e-01, 1.1271e-01, 1.0070e-01, 8.7495e-02, // f02760
502 8.0118e-02, 6.9940e-02, 6.2034e-02, 5.6051e-02, 4.7663e-02, // f02770
503 4.2450e-02, 3.6690e-02, 3.3441e-02, 3.0711e-02, 2.5205e-02, // f02780
504 2.2113e-02, 1.8880e-02, 1.6653e-02, 1.4626e-02, 1.2065e-02, // f02790
505 1.0709e-02, 9.1783e-03, 7.7274e-03, 6.7302e-03, 5.6164e-03, // f02800
506 4.9089e-03, 4.1497e-03, 3.5823e-03, 3.1124e-03, 2.6414e-03, // f02810
507 2.3167e-03, 2.0156e-03, 1.7829e-03, 1.5666e-03, 1.3928e-03, // f02820
508 1.2338e-03, 1.0932e-03, 9.7939e-04, 8.8241e-04, 7.9173e-04, // f02830
509 7.1296e-04, 6.4179e-04, 5.8031e-04, 5.2647e-04, 4.7762e-04, // f02850
510 4.3349e-04, 3.9355e-04, 3.5887e-04, 3.2723e-04, 2.9919e-04, // f02860
511 2.7363e-04, 2.5013e-04, 2.2876e-04, 2.0924e-04, 1.9193e-04, // f02870
512 1.7618e-04, 1.6188e-04, 1.4891e-04, 1.3717e-04, 1.2647e-04, // f02880
513 1.1671e-04, 1.0786e-04, 9.9785e-05, 9.2350e-05, 8.5539e-05, // f02890
514 7.9377e-05, 7.3781e-05, 6.8677e-05, 6.3993e-05, 5.9705e-05, // f02900
515 5.5788e-05, 5.2196e-05, 4.8899e-05, 4.5865e-05, 4.3079e-05, // f02910
516 4.0526e-05, 3.8182e-05, 3.6025e-05, 3.4038e-05, 3.2203e-05, // f02920
517 3.0511e-05, 2.8949e-05, 2.7505e-05, 2.6170e-05, 2.4933e-05, // f02930
518 2.3786e-05, 2.2722e-05, 2.1736e-05, 2.0819e-05, 1.9968e-05, // f02940
519 1.9178e-05, 1.8442e-05, 1.7760e-05, 1.7127e-05, 1.6541e-05, // f02960
520 1.5997e-05, 1.5495e-05, 1.5034e-05, 1.4614e-05, 1.4230e-05, // f02970
521 1.3883e-05, 1.3578e-05, 1.3304e-05, 1.3069e-05, 1.2876e-05, // f02980
522 1.2732e-05, 1.2626e-05, 1.2556e-05, 1.2544e-05, 1.2604e-05, // f02990
523 1.2719e-05, 1.2883e-05, 1.3164e-05, 1.3581e-05, 1.4187e-05, // f03000
524 1.4866e-05, 1.5669e-05, 1.6717e-05, 1.8148e-05, 2.0268e-05, // f03010
525 2.2456e-05, 2.5582e-05, 2.9183e-05, 3.3612e-05, 3.9996e-05, // f03020
526 4.6829e-05, 5.5055e-05, 6.5897e-05, 7.5360e-05, 8.7213e-05, // f03030
527 1.0046e-04, 1.1496e-04, 1.2943e-04, 1.5049e-04, 1.6973e-04, // f03040
528 1.8711e-04, 2.0286e-04, 2.2823e-04, 2.6780e-04, 2.8766e-04, // f03050
529 3.1164e-04, 3.3640e-04, 3.6884e-04, 3.9159e-04, 3.8712e-04, // f03070
530 3.7433e-04, 3.4503e-04, 3.1003e-04, 2.8027e-04, 2.5253e-04, // f03080
531 2.3408e-04, 2.2836e-04, 2.4442e-04, 2.7521e-04, 2.9048e-04, // f03090
532 3.0489e-04, 3.2646e-04, 3.3880e-04, 3.3492e-04, 3.0987e-04, // f03100
533 2.9482e-04, 2.8711e-04, 2.6068e-04, 2.2683e-04, 1.9996e-04, // f03110
534 1.7788e-04, 1.6101e-04, 1.3911e-04, 1.2013e-04, 1.0544e-04, // f03120
535 9.4224e-05, 8.1256e-05, 7.3667e-05, 6.2233e-05, 5.5906e-05, // f03130
536 5.1619e-05, 4.5140e-05, 4.0273e-05, 3.3268e-05, 3.0258e-05, // f03140
537 2.6440e-05, 2.3103e-05, 2.0749e-05, 1.8258e-05, 1.6459e-05, // f03150
538 1.4097e-05, 1.2052e-05, 1.0759e-05, 9.1400e-06, 8.1432e-06, // f03160
539 7.1460e-06, 6.4006e-06, 5.6995e-06, 4.9372e-06, 4.4455e-06, // f03180
540 3.9033e-06, 3.4740e-06, 3.1269e-06, 2.8059e-06, 2.5558e-06, // f03190
541 2.2919e-06, 2.0846e-06, 1.8983e-06, 1.7329e-06, 1.5929e-06, // f03200
542 1.4631e-06, 1.3513e-06, 1.2461e-06, 1.1519e-06, 1.0682e-06, // f03210
543 9.9256e-07, 9.2505e-07, 8.6367e-07, 8.0857e-07, 7.5674e-07, // f03220
544 7.0934e-07, 6.6580e-07, 6.2580e-07, 5.8853e-07, 5.5333e-07, // f03230
545 5.2143e-07, 4.9169e-07, 4.6431e-07, 4.3898e-07, 4.1564e-07, // f03240
546 3.9405e-07, 3.7403e-07, 3.5544e-07, 3.3819e-07, 3.2212e-07, // f03250
547 3.0714e-07, 2.9313e-07, 2.8003e-07, 2.6777e-07, 2.5628e-07, // f03260
548 2.4551e-07, 2.3540e-07, 2.2591e-07, 2.1701e-07, 2.0866e-07, // f03270
549 2.0082e-07, 1.9349e-07, 1.8665e-07, 1.8027e-07, 1.7439e-07, // f03290
550 1.6894e-07, 1.6400e-07, 1.5953e-07, 1.5557e-07, 1.5195e-07, // f03300
551 1.4888e-07, 1.4603e-07, 1.4337e-07, 1.4093e-07, 1.3828e-07, // f03310
552 1.3569e-07, 1.3270e-07, 1.2984e-07, 1.2714e-07, 1.2541e-07, // f03320
553 1.2399e-07, 1.2102e-07, 1.1878e-07, 1.1728e-07, 1.1644e-07, // f03330
554 1.1491e-07, 1.1305e-07, 1.1235e-07, 1.1228e-07, 1.1224e-07, // f03340
555 1.1191e-07, 1.1151e-07, 1.1098e-07, 1.1068e-07, 1.1109e-07, // f03350
556 1.1213e-07, 1.1431e-07, 1.1826e-07, 1.2322e-07, 1.3025e-07, // f03360
557 1.4066e-07, 1.5657e-07, 1.7214e-07, 1.9449e-07, 2.2662e-07, // f03370
558 2.6953e-07, 3.1723e-07, 3.7028e-07, 4.4482e-07, 5.3852e-07, // f03380
559 6.2639e-07, 7.2175e-07, 7.7626e-07, 8.7248e-07, 9.6759e-07, // f03400
560 1.0102e-06, 1.0620e-06, 1.1201e-06, 1.2107e-06, 1.2998e-06, // f03410
561 1.3130e-06, 1.2856e-06, 1.2350e-06, 1.1489e-06, 1.0819e-06, // f03420
562 1.0120e-06, 9.4795e-07, 9.2858e-07, 9.8060e-07, 1.0999e-06, // f03430
563 1.1967e-06, 1.2672e-06, 1.3418e-06, 1.3864e-06, 1.4330e-06, // f03440
564 1.4592e-06, 1.4598e-06, 1.4774e-06, 1.4726e-06, 1.4820e-06, // f03450
565 1.5050e-06, 1.4984e-06, 1.5181e-06, 1.5888e-06, 1.6850e-06, // f03460
566 1.7690e-06, 1.9277e-06, 2.1107e-06, 2.3068e-06, 2.5347e-06, // f03470
567 2.8069e-06, 3.1345e-06, 3.5822e-06, 3.9051e-06, 4.3422e-06, // f03480
568 4.8704e-06, 5.5351e-06, 6.3454e-06, 7.2690e-06, 8.2974e-06, // f03490
569 9.7609e-06, 1.1237e-05, 1.3187e-05, 1.5548e-05, 1.8784e-05, // f03510
570 2.1694e-05, 2.5487e-05, 3.0092e-05, 3.5385e-05, 4.2764e-05, // f03520
571 4.9313e-05, 5.5800e-05, 6.2968e-05, 7.1060e-05, 7.7699e-05, // f03530
572 8.7216e-05, 8.9335e-05, 9.2151e-05, 9.2779e-05, 9.4643e-05, // f03540
573 9.7978e-05, 1.0008e-04, 1.0702e-04, 1.1026e-04, 1.0828e-04, // f03550
574 1.0550e-04, 1.0432e-04, 1.0428e-04, 9.8980e-05, 9.4992e-05, // f03560
575 9.5159e-05, 1.0058e-04, 1.0738e-04, 1.1550e-04, 1.1229e-04, // f03570
576 1.0596e-04, 1.0062e-04, 9.1742e-05, 8.4492e-05, 6.8099e-05, // f03580
577 5.6295e-05, 4.6502e-05, 3.8071e-05, 3.0721e-05, 2.3297e-05, // f03590
578 1.8688e-05, 1.4830e-05, 1.2049e-05, 9.6754e-06, 7.9192e-06, // f03600
579 6.6673e-06, 5.6468e-06, 4.8904e-06, 4.2289e-06, 3.6880e-06, // f03620
580 3.2396e-06, 2.8525e-06, 2.5363e-06, 2.2431e-06, 1.9949e-06, // f03630
581 1.7931e-06, 1.6164e-06, 1.4431e-06, 1.2997e-06, 1.1559e-06, // f03640
582 1.0404e-06, 9.4300e-07, 8.4597e-07, 7.6133e-07, 6.8623e-07, // f03650
583 6.2137e-07, 5.6345e-07, 5.1076e-07, 4.6246e-07, 4.1906e-07, // f03660
584 3.8063e-07, 3.4610e-07, 3.1554e-07, 2.8795e-07, 2.6252e-07, // f03670
585 2.3967e-07, 2.1901e-07, 2.0052e-07, 1.8384e-07, 1.6847e-07, // f03680
586 1.5459e-07, 1.4204e-07, 1.3068e-07, 1.2036e-07, 1.1095e-07, // f03690
587 1.0237e-07, 9.4592e-08, 8.7530e-08, 8.1121e-08, 7.5282e-08, // f03700
588 6.9985e-08, 6.5189e-08, 6.0874e-08, 5.6989e-08, 5.3530e-08, // f03710
589 5.0418e-08, 4.7745e-08, 4.5367e-08, 4.3253e-08, 4.1309e-08, // f03730
590 3.9695e-08, 3.8094e-08, 3.6482e-08, 3.4897e-08, 3.3500e-08, // f03740
591 3.2302e-08, 3.0854e-08, 2.9698e-08, 2.8567e-08, 2.7600e-08, // f03750
592 2.6746e-08, 2.5982e-08, 2.5510e-08, 2.5121e-08, 2.4922e-08, // f03760
593 2.4909e-08, 2.5013e-08, 2.5216e-08, 2.5589e-08, 2.6049e-08, // f03770
594 2.6451e-08, 2.6978e-08, 2.7687e-08, 2.8600e-08, 2.9643e-08, // f03780
595 3.0701e-08, 3.2058e-08, 3.3695e-08, 3.5558e-08, 3.7634e-08, // f03790
596 3.9875e-08, 4.2458e-08, 4.5480e-08, 4.8858e-08, 5.2599e-08, // f03800
597 5.7030e-08, 6.2067e-08, 6.7911e-08, 7.4579e-08, 8.1902e-08, // f03810
598 8.9978e-08, 9.9870e-08, 1.1102e-07, 1.2343e-07, 1.3732e-07, // f03820
599 1.5394e-07, 1.7318e-07, 1.9383e-07, 2.1819e-07, 2.4666e-07, // f03840
600 2.8109e-07, 3.2236e-07, 3.7760e-07, 4.4417e-07, 5.2422e-07, // f03850
601 6.1941e-07, 7.4897e-07, 9.2041e-07, 1.1574e-06, 1.4126e-06, // f03860
602 1.7197e-06, 2.1399e-06, 2.6266e-06, 3.3424e-06, 3.8418e-06, // f03870
603 4.5140e-06, 5.0653e-06, 5.8485e-06, 6.5856e-06, 6.8937e-06, // f03880
604 6.9121e-06, 6.9005e-06, 6.9861e-06, 6.8200e-06, 6.6089e-06, // f03890
605 6.5809e-06, 7.3496e-06, 8.0311e-06, 8.3186e-06, 8.4260e-06, // f03900
606 9.0644e-06, 9.4965e-06, 9.4909e-06, 9.0160e-06, 9.1494e-06, // f03910
607 9.3629e-06, 9.5944e-06, 9.5459e-06, 8.9919e-06, 8.6040e-06, // f03920
608 7.8613e-06, 7.1567e-06, 6.2677e-06, 5.1899e-06, 4.4188e-06, // f03930
609 3.7167e-06, 3.0636e-06, 2.5573e-06, 2.0317e-06, 1.6371e-06, // f03950
610 1.3257e-06, 1.0928e-06, 8.9986e-07, 7.4653e-07, 6.1111e-07, // f03960
611 5.1395e-07, 4.3500e-07, 3.7584e-07, 3.2633e-07, 2.8413e-07, // f03970
612 2.4723e-07, 2.1709e-07, 1.9294e-07, 1.7258e-07, 1.5492e-07, // f03980
613 1.3820e-07, 1.2389e-07, 1.1189e-07, 1.0046e-07, 9.0832e-08, // f03990
614 8.2764e-08, 7.4191e-08, 6.7085e-08, 6.0708e-08, 5.4963e-08, // f04000
615 4.9851e-08, 4.5044e-08, 4.0916e-08, 3.7220e-08, 3.3678e-08, // f04010
616 3.0663e-08, 2.7979e-08, 2.5495e-08, 2.3286e-08, 2.1233e-08, // f04020
617 1.9409e-08, 1.7770e-08, 1.6260e-08, 1.4885e-08, 1.3674e-08, // f04030
618 1.2543e-08, 1.1551e-08, 1.0655e-08, 9.8585e-09, 9.1398e-09, // f04040
619 8.4806e-09, 7.8899e-09, 7.3547e-09, 6.8670e-09, 6.4131e-09, // f04060
620 5.9930e-09, 5.6096e-09, 5.2592e-09, 4.9352e-09, 4.6354e-09, // f04070
621 4.3722e-09, 4.1250e-09, 3.9081e-09, 3.7118e-09, 3.5372e-09, // f04080
622 3.3862e-09, 3.2499e-09, 3.1324e-09, 3.0313e-09, 2.9438e-09, // f04090
623 2.8686e-09, 2.8050e-09, 2.7545e-09, 2.7149e-09, 2.6907e-09, // f04100
624 2.6724e-09, 2.6649e-09, 2.6642e-09, 2.6725e-09, 2.6871e-09, // f04110
625 2.7056e-09, 2.7357e-09, 2.7781e-09, 2.8358e-09, 2.9067e-09, // f04120
626 2.9952e-09, 3.1020e-09, 3.2253e-09, 3.3647e-09, 3.5232e-09, // f04130
627 3.7037e-09, 3.9076e-09, 4.1385e-09, 4.3927e-09, 4.6861e-09, // f04140
628 5.0238e-09, 5.4027e-09, 5.8303e-09, 6.3208e-09, 6.8878e-09, // f04150
629 7.5419e-09, 8.3130e-09, 9.1952e-09, 1.0228e-08, 1.1386e-08, // f04170
630 1.2792e-08, 1.4521e-08, 1.6437e-08, 1.8674e-08, 2.1160e-08, // f04180
631 2.4506e-08, 2.8113e-08, 3.2636e-08, 3.7355e-08, 4.2234e-08, // f04190
632 4.9282e-08, 5.7358e-08, 6.6743e-08, 7.8821e-08, 9.4264e-08, // f04200
633 1.1542e-07, 1.3684e-07, 1.6337e-07, 2.0056e-07, 2.3252e-07, // f04210
634 2.6127e-07, 2.9211e-07, 3.3804e-07, 3.7397e-07, 3.8205e-07, // f04220
635 3.8810e-07, 3.9499e-07, 3.9508e-07, 3.7652e-07, 3.5859e-07, // f04230
636 3.6198e-07, 3.7871e-07, 4.0925e-07, 4.2717e-07, 4.8241e-07, // f04240
637 5.2008e-07, 5.6530e-07, 5.9531e-07, 6.1994e-07, 6.5080e-07, // f04250
638 6.6355e-07, 6.9193e-07, 6.9930e-07, 7.3058e-07, 7.4678e-07, // f04260
639 7.9193e-07, 8.3627e-07, 9.1267e-07, 1.0021e-06, 1.1218e-06, // f04280
640 1.2899e-06, 1.4447e-06, 1.7268e-06, 2.0025e-06, 2.3139e-06, // f04290
641 2.5599e-06, 2.8920e-06, 3.3059e-06, 3.5425e-06, 3.9522e-06, // f04300
642 4.0551e-06, 4.2818e-06, 4.2892e-06, 4.4210e-06, 4.5614e-06, // f04310
643 4.6739e-06, 4.9482e-06, 5.1118e-06, 5.0986e-06, 4.9417e-06, // f04320
644 4.9022e-06, 4.8449e-06, 4.8694e-06, 4.8111e-06, 4.9378e-06, // f04330
645 5.3231e-06, 5.7362e-06, 6.2350e-06, 6.0951e-06, 5.7281e-06, // f04340
646 5.4585e-06, 4.9032e-06, 4.3009e-06, 3.4776e-06, 2.8108e-06, // f04350
647 2.2993e-06, 1.7999e-06, 1.3870e-06, 1.0750e-06, 8.5191e-07, // f04360
648 6.7951e-07, 5.5336e-07, 4.6439e-07, 4.0243e-07, 3.5368e-07, // f04370
649 3.1427e-07, 2.7775e-07, 2.4486e-07, 2.1788e-07, 1.9249e-07, // f04390
650 1.7162e-07, 1.5115e-07, 1.3478e-07, 1.2236e-07, 1.1139e-07, // f04400
651 1.0092e-07, 9.0795e-08, 8.2214e-08, 7.4691e-08, 6.7486e-08, // f04410
652 6.0414e-08, 5.4584e-08, 4.8754e-08, 4.3501e-08, 3.8767e-08, // f04420
653 3.4363e-08, 3.0703e-08, 2.7562e-08, 2.4831e-08, 2.2241e-08, // f04430
654 1.9939e-08, 1.8049e-08, 1.6368e-08, 1.4863e-08, 1.3460e-08, // f04440
655 1.2212e-08, 1.1155e-08, 1.0185e-08, 9.3417e-09, 8.5671e-09, // f04450
656 7.8292e-09, 7.1749e-09, 6.5856e-09, 6.0588e-09, 5.5835e-09, // f04460
657 5.1350e-09, 4.7395e-09, 4.3771e-09, 4.0476e-09, 3.7560e-09, // f04470
658 3.4861e-09, 3.2427e-09, 3.0240e-09, 2.8278e-09, 2.6531e-09, // f04480
659 2.4937e-09, 2.3511e-09, 2.2245e-09, 2.1133e-09, 2.0159e-09, // f04500
660 1.9330e-09, 1.8669e-09, 1.8152e-09, 1.7852e-09, 1.7752e-09, // f04510
661 1.7823e-09, 1.8194e-09, 1.8866e-09, 1.9759e-09, 2.0736e-09, // f04520
662 2.2083e-09, 2.3587e-09, 2.4984e-09, 2.6333e-09, 2.8160e-09, // f04530
663 3.0759e-09, 3.3720e-09, 3.6457e-09, 4.0668e-09, 4.4541e-09, // f04540
664 4.7976e-09, 5.0908e-09, 5.4811e-09, 6.1394e-09, 6.3669e-09, // f04550
665 6.5714e-09, 6.8384e-09, 7.1918e-09, 7.3741e-09, 7.2079e-09, // f04560
666 7.2172e-09, 7.2572e-09, 7.3912e-09, 7.6188e-09, 8.3291e-09, // f04570
667 8.7885e-09, 9.2412e-09, 1.0021e-08, 1.0752e-08, 1.1546e-08, // f04580
668 1.1607e-08, 1.1949e-08, 1.2346e-08, 1.2516e-08, 1.2826e-08, // f04590
669 1.3053e-08, 1.3556e-08, 1.4221e-08, 1.5201e-08, 1.6661e-08, // f04610
670 1.8385e-08, 2.0585e-08, 2.3674e-08, 2.7928e-08, 3.3901e-08, // f04620
671 4.1017e-08, 4.9595e-08, 6.0432e-08, 7.6304e-08, 9.0764e-08, // f04630
672 1.0798e-07, 1.2442e-07, 1.4404e-07, 1.6331e-07, 1.8339e-07, // f04640
673 2.0445e-07, 2.2288e-07, 2.3083e-07, 2.3196e-07, 2.3919e-07, // f04650
674 2.3339e-07, 2.3502e-07, 2.3444e-07, 2.6395e-07, 2.9928e-07, // f04660
675 3.0025e-07, 3.0496e-07, 3.1777e-07, 3.4198e-07, 3.4739e-07, // f04670
676 3.2696e-07, 3.4100e-07, 3.5405e-07, 3.7774e-07, 3.8285e-07, // f04680
677 3.6797e-07, 3.5800e-07, 3.2283e-07, 2.9361e-07, 2.4881e-07, // f04690
678 2.0599e-07, 1.7121e-07, 1.3641e-07, 1.1111e-07, 8.9413e-08, // f04700
679 7.3455e-08, 6.2078e-08, 5.2538e-08, 4.5325e-08, 3.9005e-08, // f04720
680 3.4772e-08, 3.1203e-08, 2.8132e-08, 2.5250e-08, 2.2371e-08, // f04730
681 2.0131e-08, 1.7992e-08, 1.6076e-08, 1.4222e-08, 1.2490e-08, // f04740
682 1.1401e-08, 1.0249e-08, 9.2279e-09, 8.5654e-09, 7.6227e-09, // f04750
683 6.9648e-09, 6.2466e-09, 5.7252e-09, 5.3800e-09, 4.6960e-09, // f04760
684 4.2194e-09, 3.7746e-09, 3.3813e-09, 3.0656e-09, 2.6885e-09, // f04770
685 2.4311e-09, 2.1572e-09, 1.8892e-09, 1.7038e-09, 1.4914e-09, // f04780
686 1.3277e-09, 1.1694e-09, 1.0391e-09, 9.2779e-10, 8.3123e-10, // f04790
687 7.4968e-10, 6.8385e-10, 6.2915e-10, 5.7784e-10, 5.2838e-10, // f04800
688 4.8382e-10, 4.4543e-10, 4.1155e-10, 3.7158e-10, 3.3731e-10, // f04810
689 3.0969e-10, 2.8535e-10, 2.6416e-10, 2.4583e-10, 2.2878e-10, // f04830
690 2.1379e-10, 2.0073e-10, 1.8907e-10, 1.7866e-10, 1.6936e-10, // f04840
691 1.6119e-10, 1.5424e-10, 1.4847e-10, 1.4401e-10, 1.4068e-10, // f04850
692 1.3937e-10, 1.3943e-10, 1.4281e-10, 1.4766e-10, 1.5701e-10, // f04860
693 1.7079e-10, 1.8691e-10, 2.0081e-10, 2.1740e-10, 2.4847e-10, // f04870
694 2.6463e-10, 2.7087e-10, 2.7313e-10, 2.8352e-10, 2.9511e-10, // f04880
695 2.8058e-10, 2.7227e-10, 2.7356e-10, 2.8012e-10, 2.8034e-10, // f04890
696 2.9031e-10, 3.1030e-10, 3.3745e-10, 3.8152e-10, 4.0622e-10, // f04900
697 4.2673e-10, 4.3879e-10, 4.5488e-10, 4.7179e-10, 4.6140e-10, // f04910
698 4.6339e-10, 4.6716e-10, 4.7024e-10, 4.7931e-10, 4.8503e-10, // f04920
699 4.9589e-10, 4.9499e-10, 5.0363e-10, 5.3184e-10, 5.6451e-10, // f04940
700 6.0932e-10, 6.6469e-10, 7.4076e-10, 8.3605e-10, 9.4898e-10, // f04950
701 1.0935e-09, 1.2593e-09, 1.4913e-09, 1.8099e-09, 2.1842e-09, // f04960
702 2.7284e-09, 3.2159e-09, 3.7426e-09, 4.5226e-09, 5.3512e-09, // f04970
703 6.1787e-09, 6.8237e-09, 7.9421e-09, 9.0002e-09, 9.6841e-09, // f04980
704 9.9558e-09, 1.0232e-08, 1.0591e-08, 1.0657e-08, 1.0441e-08, // f04990
705 1.0719e-08, 1.1526e-08, 1.2962e-08, 1.4336e-08, 1.6150e-08, // f05000
706 1.8417e-08, 2.0725e-08, 2.3426e-08, 2.5619e-08, 2.7828e-08, // f05010
707 3.0563e-08, 3.3438e-08, 3.6317e-08, 4.0400e-08, 4.4556e-08, // f05020
708 5.0397e-08, 5.3315e-08, 5.9185e-08, 6.5311e-08, 6.9188e-08, // f05030
709 7.7728e-08, 7.9789e-08, 8.6598e-08, 8.7768e-08, 9.1773e-08, // f05050
710 9.7533e-08, 1.0007e-07, 1.0650e-07, 1.0992e-07, 1.0864e-07, // f05060
711 1.0494e-07, 1.0303e-07, 1.0031e-07, 1.0436e-07, 1.0537e-07, // f05070
712 1.1184e-07, 1.2364e-07, 1.3651e-07, 1.4881e-07, 1.4723e-07, // f05080
713 1.4118e-07, 1.3371e-07, 1.1902e-07, 1.0007e-07, 7.9628e-08, // f05090
714 6.4362e-08, 5.0243e-08, 3.8133e-08, 2.9400e-08, 2.3443e-08, // f05100
715 1.9319e-08, 1.6196e-08, 1.4221e-08, 1.2817e-08, 1.1863e-08, // f05110
716 1.1383e-08, 1.1221e-08, 1.1574e-08, 1.1661e-08, 1.2157e-08, // f05120
717 1.2883e-08, 1.3295e-08, 1.4243e-08, 1.4240e-08, 1.4614e-08, // f05130
718 1.4529e-08, 1.4685e-08, 1.4974e-08, 1.4790e-08, 1.4890e-08, // f05140
719 1.4704e-08, 1.4142e-08, 1.3374e-08, 1.2746e-08, 1.2172e-08, // f05160
720 1.2336e-08, 1.2546e-08, 1.3065e-08, 1.4090e-08, 1.5215e-08, // f05170
721 1.6540e-08, 1.6144e-08, 1.5282e-08, 1.4358e-08, 1.2849e-08, // f05180
722 1.0998e-08, 8.6956e-09, 7.0881e-09, 5.5767e-09, 4.2792e-09, // f05190
723 3.2233e-09, 2.5020e-09, 1.9985e-09, 1.5834e-09, 1.3015e-09, // f05200
724 1.0948e-09, 9.4141e-10, 8.1465e-10, 7.1517e-10, 6.2906e-10, // f05210
725 5.5756e-10, 4.9805e-10, 4.3961e-10, 3.9181e-10, 3.5227e-10, // f05220
726 3.1670e-10, 2.8667e-10, 2.5745e-10, 2.3212e-10, 2.0948e-10, // f05230
727 1.8970e-10, 1.7239e-10, 1.5659e-10, 1.4301e-10, 1.3104e-10, // f05240
728 1.2031e-10, 1.1095e-10, 1.0262e-10, 9.5130e-11, 8.8595e-11, // f05250
729 8.2842e-11, 7.7727e-11, 7.3199e-11, 6.9286e-11, 6.5994e-11, // f05270
730 6.3316e-11, 6.1244e-11, 5.9669e-11, 5.8843e-11, 5.8832e-11, // f05280
731 5.9547e-11, 6.1635e-11, 6.4926e-11, 7.0745e-11, 7.8802e-11, // f05290
732 8.6724e-11, 1.0052e-10, 1.1575e-10, 1.3626e-10, 1.5126e-10, // f05300
733 1.6751e-10, 1.9239e-10, 2.1748e-10, 2.2654e-10, 2.2902e-10, // f05310
734 2.3240e-10, 2.4081e-10, 2.3930e-10, 2.2378e-10, 2.2476e-10, // f05320
735 2.2791e-10, 2.4047e-10, 2.5305e-10, 2.8073e-10, 3.1741e-10, // f05330
736 3.6592e-10, 4.1495e-10, 4.6565e-10, 5.0990e-10, 5.5607e-10, // f05340
737 6.1928e-10, 6.6779e-10, 7.3350e-10, 8.1434e-10, 8.9635e-10, // f05350
738 9.9678e-10, 1.1256e-09, 1.2999e-09, 1.4888e-09, 1.7642e-09, // f05360
739 1.9606e-09, 2.2066e-09, 2.4601e-09, 2.7218e-09, 3.0375e-09, // f05380
740 3.1591e-09, 3.2852e-09, 3.2464e-09, 3.3046e-09, 3.2710e-09, // f05390
741 3.2601e-09, 3.3398e-09, 3.7446e-09, 4.0795e-09, 4.0284e-09, // f05400
742 4.0584e-09, 4.1677e-09, 4.5358e-09, 4.4097e-09, 4.2744e-09, // f05410
743 4.5449e-09, 4.8147e-09, 5.2656e-09, 5.2476e-09, 5.0275e-09, // f05420
744 4.7968e-09, 4.3654e-09, 3.9530e-09, 3.2447e-09, 2.6489e-09, // f05430
745 2.1795e-09, 1.7880e-09, 1.4309e-09, 1.1256e-09, 9.1903e-10, // f05440
746 7.6533e-10, 6.3989e-10, 5.5496e-10, 4.9581e-10, 4.5722e-10, // f05450
747 4.3898e-10, 4.3505e-10, 4.3671e-10, 4.5329e-10, 4.6827e-10, // f05460
748 4.9394e-10, 5.1122e-10, 5.1649e-10, 5.0965e-10, 4.9551e-10, // f05470
749 4.8928e-10, 4.7947e-10, 4.7989e-10, 4.9071e-10, 4.8867e-10, // f05490
750 4.7260e-10, 4.5756e-10, 4.5400e-10, 4.5993e-10, 4.4042e-10, // f05500
751 4.3309e-10, 4.4182e-10, 4.6735e-10, 5.0378e-10, 5.2204e-10, // f05510
752 5.0166e-10, 4.6799e-10, 4.3119e-10, 3.8803e-10, 3.3291e-10, // f05520
753 2.6289e-10, 2.1029e-10, 1.7011e-10, 1.3345e-10, 1.0224e-10, // f05530
754 7.8207e-11, 6.2451e-11, 5.0481e-11, 4.1507e-11, 3.5419e-11, // f05540
755 3.0582e-11, 2.6900e-11, 2.3778e-11, 2.1343e-11, 1.9182e-11, // f05550
756 1.7162e-11, 1.5391e-11, 1.3877e-11, 1.2619e-11, 1.1450e-11, // f05560
757 1.0461e-11, 9.6578e-12, 8.9579e-12, 8.3463e-12, 7.8127e-12, // f05570
758 7.3322e-12, 6.9414e-12, 6.6037e-12, 6.3285e-12, 6.1095e-12, // f05580
759 5.9387e-12, 5.8118e-12, 5.7260e-12, 5.6794e-12, 5.6711e-12, // f05600
760 5.7003e-12, 5.7670e-12, 5.8717e-12, 6.0151e-12, 6.1984e-12, // f05610
761 6.4232e-12, 6.6918e-12, 7.0065e-12, 7.3705e-12, 7.7873e-12, // f05620
762 8.2612e-12, 8.7972e-12, 9.4009e-12, 1.0079e-11, 1.0840e-11, // f05630
763 1.1692e-11, 1.2648e-11, 1.3723e-11, 1.4935e-11, 1.6313e-11, // f05640
764 1.7905e-11, 1.9740e-11, 2.1898e-11, 2.4419e-11, 2.7426e-11, // f05650
765 3.0869e-11, 3.4235e-11, 3.7841e-11, 4.1929e-11, 4.6776e-11, // f05660
766 5.2123e-11, 5.8497e-11, 6.5294e-11, 7.4038e-11, 8.4793e-11, // f05670
767 9.6453e-11, 1.1223e-10, 1.2786e-10, 1.4882e-10, 1.7799e-10, // f05680
768 2.0766e-10, 2.4523e-10, 2.8591e-10, 3.3386e-10, 4.0531e-10, // f05690
769 4.7663e-10, 5.4858e-10, 6.3377e-10, 7.1688e-10, 8.4184e-10, // f05710
770 9.5144e-10, 1.0481e-09, 1.1356e-09, 1.2339e-09, 1.3396e-09, // f05720
771 1.4375e-09, 1.5831e-09, 1.7323e-09, 1.9671e-09, 2.2976e-09, // f05730
772 2.6679e-09, 3.0777e-09, 3.4321e-09, 3.8192e-09, 4.2711e-09, // f05740
773 4.4903e-09, 4.8931e-09, 5.2253e-09, 5.4040e-09, 5.6387e-09, // f05750
774 5.6704e-09, 6.0345e-09, 6.1079e-09, 6.2576e-09, 6.4039e-09, // f05760
775 6.3776e-09, 6.1878e-09, 5.8616e-09, 5.7036e-09, 5.5840e-09, // f05770
776 5.6905e-09, 5.8931e-09, 6.2478e-09, 6.8291e-09, 7.4528e-09, // f05780
777 7.6078e-09, 7.3898e-09, 6.7573e-09, 5.9827e-09, 5.0927e-09, // f05790
778 4.0099e-09, 3.1933e-09, 2.4296e-09, 1.8485e-09, 1.4595e-09, // f05800
779 1.2017e-09, 1.0164e-09, 8.7433e-10, 7.7108e-10, 7.0049e-10, // f05820
780 6.5291e-10, 6.1477e-10, 5.9254e-10, 5.8150e-10, 5.7591e-10, // f05830
781 5.8490e-10, 5.8587e-10, 5.9636e-10, 6.2408e-10, 6.5479e-10, // f05840
782 7.0480e-10, 7.2313e-10, 7.5524e-10, 8.0863e-10, 8.3386e-10, // f05850
783 9.2342e-10, 9.6754e-10, 1.0293e-09, 1.0895e-09, 1.1330e-09, // f05860
784 1.2210e-09, 1.2413e-09, 1.2613e-09, 1.2671e-09, 1.2225e-09, // f05870
785 1.1609e-09, 1.0991e-09, 1.0600e-09, 1.0570e-09, 1.0818e-09, // f05880
786 1.1421e-09, 1.2270e-09, 1.3370e-09, 1.4742e-09, 1.4946e-09, // f05890
787 1.4322e-09, 1.3210e-09, 1.1749e-09, 1.0051e-09, 7.8387e-10, // f05900
788 6.1844e-10, 4.6288e-10, 3.4164e-10, 2.5412e-10, 1.9857e-10, // f05910
789 1.5876e-10, 1.2966e-10, 1.0920e-10, 9.4811e-11, 8.3733e-11, // f05930
790 7.3906e-11, 6.7259e-11, 6.1146e-11, 5.7119e-11, 5.3546e-11, // f05940
791 4.8625e-11, 4.4749e-11, 4.1089e-11, 3.7825e-11, 3.4465e-11, // f05950
792 3.1018e-11, 2.8109e-11, 2.5610e-11, 2.2859e-11, 2.0490e-11, // f05960
793 1.8133e-11, 1.5835e-11, 1.3949e-11, 1.2295e-11, 1.0799e-11, // f05970
794 9.6544e-12, 8.7597e-12, 7.9990e-12, 7.3973e-12, 6.9035e-12, // f05980
795 6.4935e-12, 6.1195e-12, 5.8235e-12, 5.5928e-12, 5.4191e-12, // f05990
796 5.2993e-12, 5.2338e-12, 5.2272e-12, 5.2923e-12, 5.4252e-12, // f06000
797 5.6523e-12, 5.9433e-12, 6.3197e-12, 6.9016e-12, 7.5016e-12, // f06010
798 8.2885e-12, 9.4050e-12, 1.0605e-11, 1.2257e-11, 1.3622e-11, // f06020
799 1.5353e-11, 1.7543e-11, 1.9809e-11, 2.2197e-11, 2.4065e-11, // f06040
800 2.6777e-11, 2.9751e-11, 3.2543e-11, 3.5536e-11, 3.9942e-11, // f06050
801 4.6283e-11, 5.4556e-11, 6.5490e-11, 7.6803e-11, 9.0053e-11, // f06060
802 1.0852e-10, 1.2946e-10, 1.4916e-10, 1.7748e-10, 2.0073e-10, // f06070
803 2.2485e-10, 2.5114e-10, 2.7715e-10, 3.1319e-10, 3.3305e-10, // f06080
804 3.5059e-10, 3.5746e-10, 3.6311e-10, 3.7344e-10, 3.6574e-10, // f06090
805 3.7539e-10, 3.9434e-10, 4.3510e-10, 4.3340e-10, 4.2588e-10, // f06100
806 4.3977e-10, 4.6062e-10, 4.7687e-10, 4.6457e-10, 4.8578e-10, // f06110
807 5.2344e-10, 5.6752e-10, 5.8702e-10, 5.6603e-10, 5.3784e-10, // f06120
808 4.9181e-10, 4.3272e-10, 3.5681e-10, 2.8814e-10, 2.3320e-10, // f06130
809 1.8631e-10, 1.4587e-10, 1.1782e-10, 9.8132e-11, 8.2528e-11, // f06150
810 6.9174e-11, 6.1056e-11, 5.3459e-11, 4.7116e-11, 4.1878e-11, // f06160
811 3.8125e-11, 3.6347e-11, 3.5071e-11, 3.3897e-11, 3.3541e-11, // f06170
812 3.3563e-11, 3.5469e-11, 3.8111e-11, 3.8675e-11, 4.1333e-11, // f06180
813 4.3475e-11, 4.6476e-11, 4.9761e-11, 5.1380e-11, 5.4135e-11, // f06190
814 5.3802e-11, 5.5158e-11, 5.6864e-11, 5.9311e-11, 6.3827e-11, // f06200
815 6.7893e-11, 6.8230e-11, 6.6694e-11, 6.6018e-11, 6.4863e-11, // f06210
816 6.5893e-11, 6.3813e-11, 6.4741e-11, 6.8630e-11, 7.0255e-11, // f06220
817 7.0667e-11, 6.8810e-11, 6.4104e-11, 5.8136e-11, 4.7242e-11, // f06230
818 3.7625e-11, 3.1742e-11, 2.5581e-11, 1.8824e-11, 1.3303e-11, // f06240
819 9.6919e-12, 7.5353e-12, 6.0986e-12, 5.0742e-12, 4.3094e-12, // f06260
820 3.7190e-12, 3.2520e-12, 2.8756e-12, 2.5680e-12, 2.3139e-12, // f06270
821 2.1025e-12, 1.9257e-12, 1.7777e-12, 1.6539e-12, 1.5508e-12, // f06280
822 1.4657e-12, 1.3966e-12, 1.3417e-12, 1.2998e-12, 1.2700e-12, // f06290
823 1.2514e-12, 1.2437e-12, 1.2463e-12, 1.2592e-12, 1.2823e-12, // f06300
824 1.3157e-12, 1.3596e-12, 1.4144e-12, 1.4806e-12, 1.5588e-12, // f06310
825 1.6497e-12, 1.7544e-12, 1.8738e-12, 2.0094e-12, 2.1626e-12, // f06320
826 2.3354e-12, 2.5297e-12, 2.7483e-12, 2.9941e-12, 3.2708e-12, // f06330
827 3.5833e-12, 3.9374e-12, 4.3415e-12, 4.8079e-12, 5.3602e-12, // f06340
828 5.9816e-12, 6.7436e-12, 7.6368e-12, 8.6812e-12, 9.8747e-12, // f06350
829 1.1350e-11, 1.3181e-11, 1.5406e-11, 1.7868e-11, 2.0651e-11, // f06370
830 2.4504e-11, 2.9184e-11, 3.4159e-11, 3.9979e-11, 4.8704e-11, // f06380
831 5.7856e-11, 6.7576e-11, 7.9103e-11, 9.4370e-11, 1.1224e-10, // f06390
832 1.3112e-10, 1.5674e-10, 1.8206e-10, 2.0576e-10, 2.3187e-10, // f06400
833 2.7005e-10, 3.0055e-10, 3.3423e-10, 3.6956e-10, 3.8737e-10, // f06410
834 4.2630e-10, 4.5154e-10, 4.8383e-10, 5.3582e-10, 5.8109e-10, // f06420
835 6.3741e-10, 6.3874e-10, 6.3870e-10, 6.5818e-10, 6.5056e-10, // f06430
836 6.5291e-10, 6.3159e-10, 6.3984e-10, 6.4549e-10, 6.5444e-10, // f06440
837 6.7035e-10, 6.7665e-10, 6.9124e-10, 6.8451e-10, 6.9255e-10, // f06450
838 6.9923e-10, 7.0396e-10, 6.7715e-10, 6.0371e-10, 5.3774e-10, // f06460
839 4.6043e-10, 3.7635e-10, 2.9484e-10, 2.2968e-10, 1.8185e-10, // f06480
840 1.4191e-10, 1.1471e-10, 9.4790e-11, 7.9613e-11, 6.7989e-11, // f06490
841 5.9391e-11, 5.2810e-11, 4.7136e-11, 4.2618e-11, 3.8313e-11, // f06500
842 3.4686e-11, 3.1669e-11, 2.9110e-11, 2.6871e-11, 2.5074e-11, // f06510
843 2.4368e-11, 2.3925e-11, 2.4067e-11, 2.4336e-11, 2.4704e-11, // f06520
844 2.5823e-11, 2.7177e-11, 2.9227e-11, 3.1593e-11, 3.5730e-11, // f06530
845 4.0221e-11, 4.3994e-11, 4.8448e-11, 5.3191e-11, 5.8552e-11, // f06540
846 6.3458e-11, 6.6335e-11, 7.2457e-11, 7.9091e-11, 8.2234e-11, // f06550
847 8.7668e-11, 8.7951e-11, 9.2952e-11, 9.6157e-11, 9.5926e-11, // f06560
848 1.0120e-10, 1.0115e-10, 9.9577e-11, 9.6633e-11, 9.2891e-11, // f06570
849 9.3315e-11, 9.5584e-11, 1.0064e-10, 1.0509e-10, 1.1455e-10, // f06590
850 1.2443e-10, 1.2963e-10, 1.2632e-10, 1.1308e-10, 1.0186e-10, // f06600
851 8.5880e-11, 6.7863e-11, 5.1521e-11, 3.7780e-11, 2.8842e-11, // f06610
852 2.2052e-11, 1.7402e-11, 1.4406e-11, 1.1934e-11, 1.0223e-11, // f06620
853 8.9544e-12, 7.9088e-12, 7.0675e-12, 6.2222e-12, 5.6051e-12, // f06630
854 5.0502e-12, 4.5578e-12, 4.2636e-12, 3.9461e-12, 3.7599e-12, // f06640
855 3.5215e-12, 3.2467e-12, 3.0018e-12, 2.6558e-12, 2.3928e-12, // f06650
856 2.0707e-12, 1.7575e-12, 1.5114e-12, 1.2941e-12, 1.1004e-12, // f06660
857 9.5175e-13, 8.2894e-13, 7.3253e-13, 6.5551e-13, 5.9098e-13, // f06670
858 5.3548e-13, 4.8697e-13, 4.4413e-13, 4.0600e-13, 3.7188e-13, // f06680
859 3.4121e-13, 3.1356e-13, 2.8856e-13, 2.6590e-13, 2.4533e-13, // f06700
860 2.2663e-13, 2.0960e-13, 1.9407e-13, 1.7990e-13, 1.6695e-13, // f06710
861 1.5512e-13, 1.4429e-13, 1.3437e-13, 1.2527e-13, 1.1693e-13, // f06720
862 1.0927e-13, 1.0224e-13, 9.5767e-14, 8.9816e-14, 8.4335e-14, // f06730
863 7.9285e-14, 7.4626e-14, 7.0325e-14, 6.6352e-14, 6.2676e-14, // f06740
864 5.9274e-14, 5.6121e-14, 5.3195e-14, 5.0479e-14, 4.7953e-14, // f06750
865 4.5602e-14, 4.3411e-14, 4.1367e-14, 3.9456e-14, 3.7670e-14, // f06760
866 3.5996e-14, 3.4427e-14, 3.2952e-14, 3.1566e-14, 3.0261e-14, // f06770
867 2.9030e-14, 2.7868e-14, 2.6770e-14, 2.5730e-14, 2.4745e-14, // f06780
868 2.3809e-14, 2.2921e-14, 2.2076e-14, 2.1271e-14, 2.0504e-14, // f06790
869 1.9772e-14, 1.9073e-14, 1.8404e-14, 1.7764e-14, 1.7151e-14, // f06810
870 1.6564e-14, 1.6000e-14, 1.5459e-14, 1.4939e-14, 1.4439e-14, // f06820
871 1.3958e-14, 1.3495e-14, 1.3049e-14, 1.2620e-14, 1.2206e-14, // f06830
872 1.1807e-14, 1.1422e-14, 1.1050e-14, 1.0691e-14, 1.0345e-14, // f06840
873 1.0010e-14, 9.6870e-15, 9.3747e-15, 9.0727e-15, 8.7808e-15, // f06850
874 8.4986e-15, 8.2257e-15, 7.9617e-15, 7.7064e-15, 7.4594e-15, // f06860
875 7.2204e-15, 6.9891e-15, 6.7653e-15, 6.5488e-15, 6.3392e-15, // f06870
876 6.1363e-15, 5.9399e-15, 5.7499e-15, 5.5659e-15, 5.3878e-15, // f06880
877 5.2153e-15, 5.0484e-15, 4.8868e-15, 4.7303e-15, 4.5788e-15, // f06890
878 4.4322e-15, 4.2902e-15, 4.1527e-15, 4.0196e-15, 3.8907e-15, // f06900
879 3.7659e-15, 3.6451e-15, 3.5281e-15, 3.4149e-15, 3.3052e-15, // f06920
880 3.1991e-15, 3.0963e-15, 2.9967e-15, 2.9004e-15, 2.8071e-15, // f06930
881 2.7167e-15, 2.6293e-15, 2.5446e-15, 2.4626e-15, 2.3833e-15, // f06940
882 2.3064e-15, 2.2320e-15, 2.1600e-15, 2.0903e-15, 2.0228e-15, // f06950
883 1.9574e-15, 1.8942e-15, 1.8329e-15, 1.7736e-15, 1.7163e-15, // f06960
884 1.6607e-15, 1.6069e-15, 1.5548e-15, 1.5044e-15, 1.4557e-15, // f06970
885 1.4084e-15, 1.3627e-15, 1.3185e-15, 1.2757e-15, 1.2342e-15, // f06980
886 1.1941e-15, 1.1552e-15, 1.1177e-15, 1.0813e-15, 1.0461e-15, // f06990
887 1.0120e-15, 9.7900e-16, 9.4707e-16, 9.1618e-16, 8.8628e-16, // f07000
888 8.5734e-16, 8.2933e-16, 8.0223e-16, 7.7600e-16, 7.5062e-16, // f07010
889 7.2606e-16, 7.0229e-16, 6.7929e-16, 6.5703e-16, 6.3550e-16, // f07030
890 6.1466e-16, 5.9449e-16, 5.7498e-16, 5.5610e-16, 5.3783e-16, // f07040
891 5.2015e-16, 5.0305e-16, 4.8650e-16, 4.7049e-16, 4.5500e-16, // f07050
892 4.4002e-16, 4.2552e-16, 4.1149e-16, 3.9792e-16, 3.8479e-16, // f07060
893 3.7209e-16, 3.5981e-16, 3.4792e-16, 3.3642e-16, 3.2530e-16, // f07070
894 3.1454e-16, 3.0413e-16, 2.9406e-16, 2.8432e-16, 2.7490e-16, // f07080
895 2.6579e-16, 2.5697e-16, 2.4845e-16, 2.4020e-16, 2.3223e-16, // f07090
896 2.2451e-16, 2.1705e-16, 2.0984e-16, 2.0286e-16, 1.9611e-16, // f07100
897 1.8958e-16, 1.8327e-16, 1.7716e-16, 1.7126e-16, 1.6555e-16, // f07110
898 1.6003e-16, 1.5469e-16, 1.4952e-16, 1.4453e-16, 1.3970e-16, // f07120
899 1.3503e-16};
900
901
902
903// H2O foreign continuum parameters at T=296 K for the CKD versions 0 to 2.4.2
904// date of last update: 06/28/82
905// units of (CM**3/MOL)*1.E-20
906const Numeric FH2O_ckd_0_v1 = -20.0;
907const Numeric FH2O_ckd_0_v2 = 20000.0;
908const Numeric FH2O_ckd_0_dv = 10.0;
909const int FH2O_ckd_0_npt = 2003;
910const double FH2O_ckd_0[FH2O_ckd_0_npt+addF77fields] = {
911 0.0000e-00, 1.2859E-02, 1.1715E-02,
912 1.1038E-02, 1.1715E-02, 1.2859E-02, 1.5326E-02, 1.6999E-02, // F12660
913 1.8321E-02, 1.9402E-02, 1.9570E-02, 1.9432E-02, 1.7572E-02, // F12670
914 1.6760E-02, 1.5480E-02, 1.3984E-02, 1.2266E-02, 1.0467E-02, // F12680
915 9.4526E-03, 8.0485E-03, 6.9484E-03, 6.1416E-03, 5.0941E-03, // F12690
916 4.4836E-03, 3.8133E-03, 3.4608E-03, 3.1487E-03, 2.4555E-03, // F12700
917 2.0977E-03, 1.7266E-03, 1.4920E-03, 1.2709E-03, 9.8081E-04, // F12710
918 8.5063E-04, 6.8822E-04, 5.3809E-04, 4.4679E-04, 3.3774E-04, // F12720
919 2.7979E-04, 2.1047E-04, 1.6511E-04, 1.2993E-04, 9.3033E-05, // F12730
920 7.4360E-05, 5.6428E-05, 4.5442E-05, 3.4575E-05, 2.7903E-05, // F12740
921 2.1374E-05, 1.6075E-05, 1.3022E-05, 1.0962E-05, 8.5959E-06, // F12750
922 6.9125E-06, 5.3808E-06, 4.3586E-06, 3.6394E-06, 2.9552E-06, // F12770
923 2.3547E-06, 1.8463E-06, 1.6036E-06, 1.3483E-06, 1.1968E-06, // F12780
924 1.0333E-06, 8.4484E-07, 6.7195E-07, 5.0947E-07, 4.2343E-07, // F12790
925 3.4453E-07, 2.7830E-07, 2.3063E-07, 1.9951E-07, 1.7087E-07, // F12800
926 1.4393E-07, 1.2575E-07, 1.0750E-07, 8.2325E-08, 5.7524E-08, // F12810
927 4.4482E-08, 3.8106E-08, 3.4315E-08, 2.9422E-08, 2.5069E-08, // F12820
928 2.2402E-08, 1.9349E-08, 1.6152E-08, 1.2208E-08, 8.9660E-09, // F12830
929 7.1322E-09, 6.1028E-09, 5.2938E-09, 4.5350E-09, 3.4977E-09, // F12840
930 2.9511E-09, 2.4734E-09, 2.0508E-09, 1.8507E-09, 1.6373E-09, // F12850
931 1.5171E-09, 1.3071E-09, 1.2462E-09, 1.2148E-09, 1.2590E-09, // F12860
932 1.3153E-09, 1.3301E-09, 1.4483E-09, 1.6944E-09, 2.0559E-09, // F12880
933 2.2954E-09, 2.6221E-09, 3.2606E-09, 4.2392E-09, 5.2171E-09, // F12890
934 6.2553E-09, 8.2548E-09, 9.5842E-09, 1.1280E-08, 1.3628E-08, // F12900
935 1.7635E-08, 2.1576E-08, 2.4835E-08, 3.0014E-08, 3.8485E-08, // F12910
936 4.7440E-08, 5.5202E-08, 7.0897E-08, 9.6578E-08, 1.3976E-07, // F12920
937 1.8391E-07, 2.3207E-07, 2.9960E-07, 4.0408E-07, 5.9260E-07, // F12930
938 7.8487E-07, 1.0947E-06, 1.4676E-06, 1.9325E-06, 2.6587E-06, // F12940
939 3.4534E-06, 4.4376E-06, 5.8061E-06, 7.0141E-06, 8.4937E-06, // F12950
940 1.0186E-05, 1.2034E-05, 1.3837E-05, 1.6595E-05, 1.9259E-05, // F12960
941 2.1620E-05, 2.3681E-05, 2.7064E-05, 3.2510E-05, 3.5460E-05, // F12970
942 3.9109E-05, 4.2891E-05, 4.7757E-05, 5.0981E-05, 5.0527E-05, // F12990
943 4.8618E-05, 4.4001E-05, 3.7982E-05, 3.2667E-05, 2.7794E-05, // F13000
944 2.4910E-05, 2.4375E-05, 2.7316E-05, 3.2579E-05, 3.5499E-05, // F13010
945 3.8010E-05, 4.1353E-05, 4.3323E-05, 4.3004E-05, 3.9790E-05, // F13020
946 3.7718E-05, 3.6360E-05, 3.2386E-05, 2.7409E-05, 2.3626E-05, // F13030
947 2.0631E-05, 1.8371E-05, 1.5445E-05, 1.2989E-05, 1.1098E-05, // F13040
948 9.6552E-06, 8.0649E-06, 7.2365E-06, 5.9137E-06, 5.2759E-06, // F13050
949 4.8860E-06, 4.1321E-06, 3.5918E-06, 2.7640E-06, 2.4892E-06, // F13060
950 2.1018E-06, 1.7848E-06, 1.5855E-06, 1.3569E-06, 1.1986E-06, // F13070
951 9.4693E-07, 7.4097E-07, 6.3443E-07, 4.8131E-07, 4.0942E-07, // F13080
952 3.3316E-07, 2.8488E-07, 2.3461E-07, 1.7397E-07, 1.4684E-07, // F13100
953 1.0953E-07, 8.5396E-08, 6.9261E-08, 5.4001E-08, 4.5430E-08, // F13110
954 3.2791E-08, 2.5995E-08, 2.0225E-08, 1.5710E-08, 1.3027E-08, // F13120
955 1.0229E-08, 8.5277E-09, 6.5249E-09, 5.0117E-09, 3.9906E-09, // F13130
956 3.2332E-09, 2.7847E-09, 2.4570E-09, 2.3359E-09, 2.0599E-09, // F13140
957 1.8436E-09, 1.6559E-09, 1.4910E-09, 1.2794E-09, 9.8229E-10, // F13150
958 8.0054E-10, 6.0769E-10, 4.5646E-10, 3.3111E-10, 2.4428E-10, // F13160
959 1.8007E-10, 1.3291E-10, 9.7974E-11, 7.8271E-11, 6.3833E-11, // F13170
960 5.4425E-11, 4.6471E-11, 4.0209E-11, 3.5227E-11, 3.1212E-11, // F13180
961 2.8840E-11, 2.7762E-11, 2.7935E-11, 3.2012E-11, 3.9525E-11, // F13190
962 5.0303E-11, 6.8027E-11, 9.3954E-11, 1.2986E-10, 1.8478E-10, // F13210
963 2.5331E-10, 3.4827E-10, 4.6968E-10, 6.2380E-10, 7.9106E-10, // F13220
964 1.0026E-09, 1.2102E-09, 1.4146E-09, 1.6154E-09, 1.7510E-09, // F13230
965 1.8575E-09, 1.8742E-09, 1.8700E-09, 1.8582E-09, 1.9657E-09, // F13240
966 2.1204E-09, 2.0381E-09, 2.0122E-09, 2.0436E-09, 2.1213E-09, // F13250
967 2.0742E-09, 1.9870E-09, 2.0465E-09, 2.1556E-09, 2.2222E-09, // F13260
968 2.1977E-09, 2.1047E-09, 1.9334E-09, 1.7357E-09, 1.5754E-09, // F13270
969 1.4398E-09, 1.4018E-09, 1.5459E-09, 1.7576E-09, 2.1645E-09, // F13280
970 2.9480E-09, 4.4439E-09, 5.8341E-09, 8.0757E-09, 1.1658E-08, // F13290
971 1.6793E-08, 2.2694E-08, 2.9468E-08, 3.9278E-08, 5.2145E-08, // F13300
972 6.4378E-08, 7.7947E-08, 8.5321E-08, 9.7848E-08, 1.0999E-07, // F13320
973 1.1489E-07, 1.2082E-07, 1.2822E-07, 1.4053E-07, 1.5238E-07, // F13330
974 1.5454E-07, 1.5018E-07, 1.4048E-07, 1.2359E-07, 1.0858E-07, // F13340
975 9.3486E-08, 8.1638E-08, 7.7690E-08, 8.4625E-08, 1.0114E-07, // F13350
976 1.1430E-07, 1.2263E-07, 1.3084E-07, 1.3380E-07, 1.3573E-07, // F13360
977 1.3441E-07, 1.2962E-07, 1.2638E-07, 1.1934E-07, 1.1371E-07, // F13370
978 1.0871E-07, 9.8843E-08, 9.1877E-08, 9.1050E-08, 9.3213E-08, // F13380
979 9.2929E-08, 1.0155E-07, 1.1263E-07, 1.2370E-07, 1.3636E-07, // F13390
980 1.5400E-07, 1.7656E-07, 2.1329E-07, 2.3045E-07, 2.5811E-07, // F13400
981 2.9261E-07, 3.4259E-07, 4.0770E-07, 4.8771E-07, 5.8081E-07, // F13410
982 7.2895E-07, 8.7482E-07, 1.0795E-06, 1.3384E-06, 1.7208E-06, // F13430
983 2.0677E-06, 2.5294E-06, 3.1123E-06, 3.7900E-06, 4.7752E-06, // F13440
984 5.6891E-06, 6.6261E-06, 7.6246E-06, 8.7730E-06, 9.6672E-06, // F13450
985 1.0980E-05, 1.1287E-05, 1.1670E-05, 1.1635E-05, 1.1768E-05, // F13460
986 1.2039E-05, 1.2253E-05, 1.3294E-05, 1.4005E-05, 1.3854E-05, // F13470
987 1.3420E-05, 1.3003E-05, 1.2645E-05, 1.1715E-05, 1.1258E-05, // F13480
988 1.1516E-05, 1.2494E-05, 1.3655E-05, 1.4931E-05, 1.4649E-05, // F13490
989 1.3857E-05, 1.3120E-05, 1.1791E-05, 1.0637E-05, 8.2760E-06, // F13500
990 6.5821E-06, 5.1959E-06, 4.0158E-06, 3.0131E-06, 2.0462E-06, // F13510
991 1.4853E-06, 1.0365E-06, 7.3938E-07, 4.9752E-07, 3.4148E-07, // F13520
992 2.4992E-07, 1.8363E-07, 1.4591E-07, 1.1380E-07, 9.0588E-08, // F13540
993 7.3697E-08, 6.0252E-08, 5.1868E-08, 4.2660E-08, 3.6163E-08, // F13550
994 3.2512E-08, 2.9258E-08, 2.4238E-08, 2.1209E-08, 1.6362E-08, // F13560
995 1.3871E-08, 1.2355E-08, 9.6940E-09, 7.7735E-09, 6.2278E-09, // F13570
996 5.2282E-09, 4.3799E-09, 3.5545E-09, 2.7527E-09, 2.0950E-09, // F13580
997 1.6344E-09, 1.2689E-09, 1.0403E-09, 8.4880E-10, 6.3461E-10, // F13590
998 4.7657E-10, 3.5220E-10, 2.7879E-10, 2.3021E-10, 1.6167E-10, // F13600
999 1.1732E-10, 8.9206E-11, 7.0596E-11, 5.8310E-11, 4.4084E-11, // F13610
1000 3.1534E-11, 2.5068E-11, 2.2088E-11, 2.2579E-11, 2.2637E-11, // F13620
1001 2.5705E-11, 3.2415E-11, 4.6116E-11, 6.5346E-11, 9.4842E-11, // F13630
1002 1.2809E-10, 1.8211E-10, 2.4052E-10, 3.0270E-10, 3.5531E-10, // F13650
1003 4.2402E-10, 4.6730E-10, 4.7942E-10, 4.6813E-10, 4.5997E-10, // F13660
1004 4.5788E-10, 4.0311E-10, 3.7367E-10, 3.3149E-10, 2.9281E-10, // F13670
1005 2.5231E-10, 2.1152E-10, 1.9799E-10, 1.8636E-10, 1.9085E-10, // F13680
1006 2.0786E-10, 2.2464E-10, 2.3785E-10, 2.5684E-10, 2.7499E-10, // F13690
1007 2.6962E-10, 2.6378E-10, 2.6297E-10, 2.6903E-10, 2.7035E-10, // F13700
1008 2.5394E-10, 2.5655E-10, 2.7184E-10, 2.9013E-10, 3.0585E-10, // F13710
1009 3.0791E-10, 3.1667E-10, 3.4343E-10, 3.7365E-10, 4.0269E-10, // F13720
1010 4.7260E-10, 5.6584E-10, 6.9791E-10, 8.6569E-10, 1.0393E-09, // F13730
1011 1.2067E-09, 1.5047E-09, 1.8583E-09, 2.2357E-09, 2.6498E-09, // F13740
1012 3.2483E-09, 3.9927E-09, 4.6618E-09, 5.5555E-09, 6.6609E-09, // F13760
1013 8.2139E-09, 1.0285E-08, 1.3919E-08, 1.8786E-08, 2.5150E-08, // F13770
1014 3.3130E-08, 4.5442E-08, 6.3370E-08, 9.0628E-08, 1.2118E-07, // F13780
1015 1.5927E-07, 2.1358E-07, 2.7825E-07, 3.7671E-07, 4.4894E-07, // F13790
1016 5.4442E-07, 6.2240E-07, 7.3004E-07, 8.3384E-07, 8.7933E-07, // F13800
1017 8.8080E-07, 8.6939E-07, 8.6541E-07, 8.2055E-07, 7.7278E-07, // F13810
1018 7.5989E-07, 8.6909E-07, 9.7945E-07, 1.0394E-06, 1.0646E-06, // F13820
1019 1.1509E-06, 1.2017E-06, 1.1915E-06, 1.1259E-06, 1.1549E-06, // F13830
1020 1.1938E-06, 1.2356E-06, 1.2404E-06, 1.1716E-06, 1.1149E-06, // F13840
1021 1.0073E-06, 8.9845E-07, 7.6639E-07, 6.1517E-07, 5.0887E-07, // F13850
1022 4.1269E-07, 3.2474E-07, 2.5698E-07, 1.8893E-07, 1.4009E-07, // F13870
1023 1.0340E-07, 7.7724E-08, 5.7302E-08, 4.2178E-08, 2.9603E-08, // F13880
1024 2.1945E-08, 1.6301E-08, 1.2806E-08, 1.0048E-08, 7.8970E-09, // F13890
1025 6.1133E-09, 4.9054E-09, 4.1985E-09, 3.6944E-09, 3.2586E-09, // F13900
1026 2.7362E-09, 2.3647E-09, 2.1249E-09, 1.8172E-09, 1.6224E-09, // F13910
1027 1.5158E-09, 1.2361E-09, 1.0682E-09, 9.2312E-10, 7.9220E-10, // F13920
1028 6.8174E-10, 5.6147E-10, 4.8268E-10, 4.1534E-10, 3.3106E-10, // F13930
1029 2.8275E-10, 2.4584E-10, 2.0742E-10, 1.7840E-10, 1.4664E-10, // F13940
1030 1.2390E-10, 1.0497E-10, 8.5038E-11, 6.7008E-11, 5.6355E-11, // F13950
1031 4.3323E-11, 3.6914E-11, 3.2262E-11, 3.0749E-11, 3.0318E-11, // F13960
1032 2.9447E-11, 2.9918E-11, 3.0668E-11, 3.1315E-11, 3.0329E-11, // F13980
1033 2.8259E-11, 2.6065E-11, 2.3578E-11, 2.0469E-11, 1.6908E-11, // F13990
1034 1.4912E-11, 1.1867E-11, 9.9730E-12, 8.1014E-12, 6.7528E-12, // F14000
1035 6.3133E-12, 5.8599E-12, 6.0145E-12, 6.5105E-12, 7.0537E-12, // F14010
1036 7.4973E-12, 7.8519E-12, 8.5039E-12, 9.1995E-12, 1.0694E-11, // F14020
1037 1.1659E-11, 1.2685E-11, 1.3087E-11, 1.3222E-11, 1.2634E-11, // F14030
1038 1.1077E-11, 9.6259E-12, 8.3202E-12, 7.4857E-12, 6.8069E-12, // F14040
1039 6.7496E-12, 7.3116E-12, 8.0171E-12, 8.6394E-12, 9.2659E-12, // F14050
1040 1.0048E-11, 1.0941E-11, 1.2226E-11, 1.3058E-11, 1.5193E-11, // F14060
1041 1.8923E-11, 2.3334E-11, 2.8787E-11, 3.6693E-11, 4.8295E-11, // F14070
1042 6.4260E-11, 8.8269E-11, 1.1865E-10, 1.5961E-10, 2.0605E-10, // F14090
1043 2.7349E-10, 3.7193E-10, 4.8216E-10, 6.1966E-10, 7.7150E-10, // F14100
1044 1.0195E-09, 1.2859E-09, 1.6535E-09, 2.0316E-09, 2.3913E-09, // F14110
1045 3.0114E-09, 3.7495E-09, 4.6504E-09, 5.9145E-09, 7.6840E-09, // F14120
1046 1.0304E-08, 1.3010E-08, 1.6441E-08, 2.1475E-08, 2.5892E-08, // F14130
1047 2.9788E-08, 3.3820E-08, 4.0007E-08, 4.4888E-08, 4.5765E-08, // F14140
1048 4.6131E-08, 4.6239E-08, 4.4849E-08, 4.0729E-08, 3.6856E-08, // F14150
1049 3.6164E-08, 3.7606E-08, 4.1457E-08, 4.3750E-08, 5.1150E-08, // F14160
1050 5.6054E-08, 6.1586E-08, 6.4521E-08, 6.6494E-08, 6.9024E-08, // F14170
1051 6.8893E-08, 7.0901E-08, 6.9760E-08, 7.1485E-08, 7.0740E-08, // F14180
1052 7.3764E-08, 7.6618E-08, 8.4182E-08, 9.3838E-08, 1.0761E-07, // F14200
1053 1.2851E-07, 1.4748E-07, 1.8407E-07, 2.2109E-07, 2.6392E-07, // F14210
1054 2.9887E-07, 3.4493E-07, 4.0336E-07, 4.3551E-07, 4.9231E-07, // F14220
1055 5.0728E-07, 5.3781E-07, 5.3285E-07, 5.4496E-07, 5.5707E-07, // F14230
1056 5.6944E-07, 6.1123E-07, 6.4317E-07, 6.4581E-07, 6.1999E-07, // F14240
1057 6.0191E-07, 5.7762E-07, 5.7241E-07, 5.7013E-07, 6.0160E-07, // F14250
1058 6.6905E-07, 7.4095E-07, 8.2121E-07, 8.0947E-07, 7.6145E-07, // F14260
1059 7.2193E-07, 6.3722E-07, 5.4316E-07, 4.2186E-07, 3.2528E-07, // F14270
1060 2.5207E-07, 1.8213E-07, 1.2658E-07, 8.6746E-08, 6.0216E-08, // F14280
1061 4.1122E-08, 2.8899E-08, 2.1740E-08, 1.7990E-08, 1.5593E-08, // F14290
1062 1.3970E-08, 1.2238E-08, 1.0539E-08, 9.2386E-09, 7.8481E-09, // F14310
1063 6.8704E-09, 5.7615E-09, 5.0434E-09, 4.6886E-09, 4.3770E-09, // F14320
1064 3.9768E-09, 3.5202E-09, 3.1854E-09, 2.9009E-09, 2.5763E-09, // F14330
1065 2.2135E-09, 1.9455E-09, 1.6248E-09, 1.3368E-09, 1.0842E-09, // F14340
1066 8.4254E-10, 6.7414E-10, 5.4667E-10, 4.5005E-10, 3.4932E-10, // F14350
1067 2.6745E-10, 2.2053E-10, 1.8162E-10, 1.4935E-10, 1.1618E-10, // F14360
1068 9.1888E-11, 8.0672E-11, 6.8746E-11, 6.2668E-11, 5.5715E-11, // F14370
1069 4.5074E-11, 3.7669E-11, 3.2082E-11, 2.8085E-11, 2.4838E-11, // F14380
1070 1.9791E-11, 1.6964E-11, 1.3887E-11, 1.1179E-11, 9.7499E-12, // F14390
1071 7.8255E-12, 6.3698E-12, 5.3265E-12, 4.6588E-12, 4.4498E-12, // F14400
1072 3.9984E-12, 3.7513E-12, 3.7176E-12, 3.9148E-12, 4.2702E-12, // F14420
1073 5.0090E-12, 6.5801E-12, 8.7787E-12, 1.2718E-11, 1.8375E-11, // F14430
1074 2.5304E-11, 3.5403E-11, 4.8842E-11, 6.4840E-11, 8.0911E-11, // F14440
1075 1.0136E-10, 1.2311E-10, 1.4203E-10, 1.5869E-10, 1.8093E-10, // F14450
1076 2.1370E-10, 2.5228E-10, 2.8816E-10, 3.4556E-10, 3.9860E-10, // F14460
1077 4.4350E-10, 4.7760E-10, 5.2357E-10, 6.0827E-10, 6.3635E-10, // F14470
1078 6.5886E-10, 6.8753E-10, 7.2349E-10, 7.2789E-10, 6.8232E-10, // F14480
1079 6.6081E-10, 6.4232E-10, 6.3485E-10, 6.4311E-10, 7.2235E-10, // F14490
1080 7.7263E-10, 8.1668E-10, 9.0324E-10, 9.7643E-10, 1.0535E-09, // F14500
1081 1.0195E-09, 1.0194E-09, 1.0156E-09, 9.6792E-10, 9.2725E-10, // F14510
1082 8.7347E-10, 8.4484E-10, 8.2647E-10, 8.4363E-10, 9.1261E-10, // F14530
1083 1.0051E-09, 1.1511E-09, 1.4037E-09, 1.8066E-09, 2.4483E-09, // F14540
1084 3.2739E-09, 4.3194E-09, 5.6902E-09, 7.7924E-09, 9.7376E-09, // F14550
1085 1.2055E-08, 1.4303E-08, 1.6956E-08, 1.9542E-08, 2.2233E-08, // F14560
1086 2.5186E-08, 2.7777E-08, 2.8943E-08, 2.8873E-08, 2.9417E-08, // F14570
1087 2.7954E-08, 2.7524E-08, 2.7040E-08, 3.1254E-08, 3.6843E-08, // F14580
1088 3.7797E-08, 3.8713E-08, 4.0135E-08, 4.2824E-08, 4.3004E-08, // F14590
1089 4.0279E-08, 4.2781E-08, 4.5220E-08, 4.8948E-08, 5.0172E-08, // F14600
1090 4.8499E-08, 4.7182E-08, 4.2204E-08, 3.7701E-08, 3.0972E-08, // F14610
1091 2.4654E-08, 1.9543E-08, 1.4609E-08, 1.1171E-08, 8.3367E-09, // F14620
1092 6.3791E-09, 5.0790E-09, 4.0655E-09, 3.3658E-09, 2.7882E-09, // F14640
1093 2.4749E-09, 2.2287E-09, 2.0217E-09, 1.8191E-09, 1.5897E-09, // F14650
1094 1.4191E-09, 1.2448E-09, 1.0884E-09, 9.3585E-10, 7.9429E-10, // F14660
1095 7.3214E-10, 6.5008E-10, 5.7549E-10, 5.4300E-10, 4.7251E-10, // F14670
1096 4.3451E-10, 3.8446E-10, 3.5589E-10, 3.4432E-10, 2.8209E-10, // F14680
1097 2.4620E-10, 2.1278E-10, 1.8406E-10, 1.6314E-10, 1.3261E-10, // F14690
1098 1.1696E-10, 9.6865E-11, 7.6814E-11, 6.6411E-11, 5.0903E-11, // F14700
1099 4.0827E-11, 3.0476E-11, 2.3230E-11, 1.7707E-11, 1.3548E-11, // F14710
1100 1.0719E-11, 9.3026E-12, 8.7967E-12, 8.3136E-12, 7.3918E-12, // F14720
1101 6.5293E-12, 5.9243E-12, 5.3595E-12, 3.5266E-12, 2.2571E-12, // F14730
1102 1.6150E-12, 1.1413E-12, 8.4998E-13, 7.0803E-13, 5.1747E-13, // F14750
1103 4.0694E-13, 3.6528E-13, 3.3670E-13, 3.1341E-13, 2.9390E-13, // F14760
1104 2.8680E-13, 3.1283E-13, 3.7294E-13, 5.0194E-13, 6.7919E-13, // F14770
1105 1.0455E-12, 1.5230E-12, 2.3932E-12, 3.4231E-12, 5.0515E-12, // F14780
1106 7.3193E-12, 9.9406E-12, 1.2193E-11, 1.4742E-11, 1.9269E-11, // F14790
1107 2.1816E-11, 2.2750E-11, 2.2902E-11, 2.3888E-11, 2.4902E-11, // F14800
1108 2.2160E-11, 2.0381E-11, 1.9903E-11, 2.0086E-11, 1.9304E-11, // F14810
1109 2.0023E-11, 2.2244E-11, 2.5450E-11, 3.1228E-11, 3.4560E-11, // F14820
1110 3.6923E-11, 3.7486E-11, 3.8124E-11, 3.8317E-11, 3.4737E-11, // F14830
1111 3.3037E-11, 3.1724E-11, 2.9840E-11, 2.8301E-11, 2.5857E-11, // F14840
1112 2.3708E-11, 1.9452E-11, 1.6232E-11, 1.5174E-11, 1.4206E-11, // F14860
1113 1.4408E-11, 1.5483E-11, 1.8642E-11, 2.3664E-11, 3.0181E-11, // F14870
1114 4.0160E-11, 5.2287E-11, 7.2754E-11, 1.0511E-10, 1.4531E-10, // F14880
1115 2.0998E-10, 2.6883E-10, 3.3082E-10, 4.2638E-10, 5.3132E-10, // F14890
1116 6.3617E-10, 7.1413E-10, 8.5953E-10, 9.9715E-10, 1.0796E-09, // F14900
1117 1.0978E-09, 1.1052E-09, 1.1095E-09, 1.0641E-09, 9.7881E-10, // F14910
1118 9.6590E-10, 1.0332E-09, 1.1974E-09, 1.3612E-09, 1.5829E-09, // F14920
1119 1.8655E-09, 2.1465E-09, 2.4779E-09, 2.7370E-09, 2.9915E-09, // F14930
1120 3.3037E-09, 3.6347E-09, 3.9587E-09, 4.4701E-09, 5.0122E-09, // F14940
1121 5.8044E-09, 6.1916E-09, 6.9613E-09, 7.7863E-09, 8.2820E-09, // F14950
1122 9.4359E-09, 9.7387E-09, 1.0656E-08, 1.0746E-08, 1.1210E-08, // F14970
1123 1.1905E-08, 1.2194E-08, 1.3145E-08, 1.3738E-08, 1.3634E-08, // F14980
1124 1.3011E-08, 1.2511E-08, 1.1805E-08, 1.2159E-08, 1.2390E-08, // F14990
1125 1.3625E-08, 1.5678E-08, 1.7886E-08, 1.9933E-08, 1.9865E-08, // F15000
1126 1.9000E-08, 1.7812E-08, 1.5521E-08, 1.2593E-08, 9.5635E-09, // F15010
1127 7.2987E-09, 5.2489E-09, 3.5673E-09, 2.4206E-09, 1.6977E-09, // F15020
1128 1.2456E-09, 9.3744E-10, 7.8379E-10, 6.9960E-10, 6.6451E-10, // F15030
1129 6.8521E-10, 7.4234E-10, 8.6658E-10, 9.4972E-10, 1.0791E-09, // F15040
1130 1.2359E-09, 1.3363E-09, 1.5025E-09, 1.5368E-09, 1.6152E-09, // F15050
1131 1.6184E-09, 1.6557E-09, 1.7035E-09, 1.6916E-09, 1.7237E-09, // F15060
1132 1.7175E-09, 1.6475E-09, 1.5335E-09, 1.4272E-09, 1.3282E-09, // F15080
1133 1.3459E-09, 1.4028E-09, 1.5192E-09, 1.7068E-09, 1.9085E-09, // F15090
1134 2.1318E-09, 2.1020E-09, 1.9942E-09, 1.8654E-09, 1.6391E-09, // F15100
1135 1.3552E-09, 1.0186E-09, 7.8540E-10, 5.7022E-10, 3.9247E-10, // F15110
1136 2.5441E-10, 1.6699E-10, 1.1132E-10, 6.8989E-11, 4.5255E-11, // F15120
1137 3.1106E-11, 2.3161E-11, 1.7618E-11, 1.4380E-11, 1.1601E-11, // F15130
1138 9.7148E-12, 8.4519E-12, 6.5392E-12, 5.4113E-12, 4.7624E-12, // F15140
1139 4.0617E-12, 3.6173E-12, 2.8608E-12, 2.2724E-12, 1.7436E-12, // F15150
1140 1.3424E-12, 1.0358E-12, 7.3064E-13, 5.4500E-13, 4.0551E-13, // F15160
1141 2.8642E-13, 2.1831E-13, 1.6860E-13, 1.2086E-13, 1.0150E-13, // F15170
1142 9.3550E-14, 8.4105E-14, 7.3051E-14, 6.9796E-14, 7.9949E-14, // F15190
1143 1.0742E-13, 1.5639E-13, 2.1308E-13, 3.1226E-13, 4.6853E-13, // F15200
1144 6.6917E-13, 1.0088E-12, 1.4824E-12, 2.2763E-12, 3.3917E-12, // F15210
1145 4.4585E-12, 6.3187E-12, 8.4189E-12, 1.1302E-11, 1.3431E-11, // F15220
1146 1.5679E-11, 1.9044E-11, 2.2463E-11, 2.3605E-11, 2.3619E-11, // F15230
1147 2.3505E-11, 2.3805E-11, 2.2549E-11, 1.9304E-11, 1.8382E-11, // F15240
1148 1.7795E-11, 1.8439E-11, 1.9146E-11, 2.1966E-11, 2.6109E-11, // F15250
1149 3.1883E-11, 3.7872E-11, 4.3966E-11, 4.8789E-11, 5.3264E-11, // F15260
1150 5.9705E-11, 6.3744E-11, 7.0163E-11, 7.9114E-11, 8.8287E-11, // F15270
1151 9.9726E-11, 1.1498E-10, 1.3700E-10, 1.6145E-10, 1.9913E-10, // F15280
1152 2.2778E-10, 2.6216E-10, 2.9770E-10, 3.3405E-10, 3.7821E-10, // F15300
1153 3.9552E-10, 4.1322E-10, 4.0293E-10, 4.0259E-10, 3.8853E-10, // F15310
1154 3.7842E-10, 3.8551E-10, 4.4618E-10, 5.0527E-10, 5.0695E-10, // F15320
1155 5.1216E-10, 5.1930E-10, 5.5794E-10, 5.3320E-10, 5.2008E-10, // F15330
1156 5.6888E-10, 6.1883E-10, 6.9006E-10, 6.9505E-10, 6.6768E-10, // F15340
1157 6.3290E-10, 5.6753E-10, 5.0327E-10, 3.9830E-10, 3.1147E-10, // F15350
1158 2.4416E-10, 1.8860E-10, 1.3908E-10, 9.9156E-11, 7.3779E-11, // F15360
1159 5.6048E-11, 4.2457E-11, 3.4505E-11, 2.9881E-11, 2.7865E-11, // F15370
1160 2.8471E-11, 3.1065E-11, 3.4204E-11, 3.9140E-11, 4.3606E-11, // F15380
1161 4.9075E-11, 5.3069E-11, 5.5236E-11, 5.5309E-11, 5.3832E-11, // F15390
1162 5.3183E-11, 5.1783E-11, 5.2042E-11, 5.4422E-11, 5.5656E-11, // F15410
1163 5.4409E-11, 5.2659E-11, 5.1696E-11, 5.1726E-11, 4.9003E-11, // F15420
1164 4.9050E-11, 5.1700E-11, 5.6818E-11, 6.3129E-11, 6.6542E-11, // F15430
1165 6.4367E-11, 5.9908E-11, 5.4470E-11, 4.7903E-11, 3.9669E-11, // F15440
1166 2.9651E-11, 2.2286E-11, 1.6742E-11, 1.1827E-11, 7.7739E-12, // F15450
1167 4.8805E-12, 3.1747E-12, 2.0057E-12, 1.2550E-12, 8.7434E-13, // F15460
1168 6.2755E-13, 4.9752E-13, 4.0047E-13, 3.5602E-13, 3.0930E-13, // F15470
1169 2.4903E-13, 1.9316E-13, 1.4995E-13, 1.2059E-13, 8.7242E-14, // F15480
1170 6.4511E-14, 5.3300E-14, 4.3741E-14, 3.4916E-14, 2.6560E-14, // F15490
1171 1.6923E-14, 1.1816E-14, 6.7071E-15, 3.6474E-15, 2.0686E-15, // F15500
1172 1.1925E-15, 6.8948E-16, 3.9661E-16, 2.2576E-16, 1.2669E-16, // F15520
1173 6.9908E-17, 3.7896E-17, 2.0280E-17, 1.1016E-17, 6.7816E-18, // F15530
1174 6.0958E-18, 8.9913E-18, 1.7201E-17, 3.4964E-17, 7.0722E-17, // F15540
1175 1.4020E-16, 2.7167E-16, 5.1478E-16, 9.5500E-16, 1.7376E-15, // F15550
1176 3.1074E-15, 5.4789E-15, 9.5640E-15, 1.6635E-14, 2.9145E-14, // F15560
1177 5.2179E-14, 8.8554E-14, 1.4764E-13, 2.3331E-13, 3.5996E-13, // F15570
1178 5.2132E-13, 6.3519E-13, 7.3174E-13, 8.3752E-13, 9.8916E-13, // F15580
1179 1.1515E-12, 1.4034E-12, 1.6594E-12, 2.1021E-12, 2.7416E-12, // F15590
1180 3.4135E-12, 4.5517E-12, 5.5832E-12, 7.2303E-12, 9.9484E-12, // F15600
1181 1.2724E-11, 1.6478E-11, 2.0588E-11, 2.5543E-11, 3.3625E-11, // F15610
1182 4.1788E-11, 5.0081E-11, 6.0144E-11, 6.9599E-11, 8.4408E-11, // F15630
1183 9.7143E-11, 1.0805E-10, 1.1713E-10, 1.2711E-10, 1.3727E-10, // F15640
1184 1.4539E-10, 1.6049E-10, 1.7680E-10, 2.0557E-10, 2.4967E-10, // F15650
1185 3.0096E-10, 3.5816E-10, 4.0851E-10, 4.6111E-10, 5.2197E-10, // F15660
1186 5.5043E-10, 6.0324E-10, 6.4983E-10, 6.7498E-10, 7.0545E-10, // F15670
1187 7.0680E-10, 7.5218E-10, 7.5723E-10, 7.7840E-10, 8.0081E-10, // F15680
1188 8.0223E-10, 7.7271E-10, 7.1676E-10, 6.7819E-10, 6.4753E-10, // F15690
1189 6.5844E-10, 7.0163E-10, 7.7503E-10, 8.8152E-10, 9.9022E-10, // F15700
1190 1.0229E-09, 9.9296E-10, 8.9911E-10, 7.7813E-10, 6.3785E-10, // F15710
1191 4.7491E-10, 3.5280E-10, 2.4349E-10, 1.6502E-10, 1.1622E-10, // F15720
1192 8.6715E-11, 6.7360E-11, 5.3910E-11, 4.5554E-11, 4.1300E-11, // F15740
1193 3.9728E-11, 3.9000E-11, 3.9803E-11, 4.1514E-11, 4.3374E-11, // F15750
1194 4.6831E-11, 4.8921E-11, 5.1995E-11, 5.7242E-11, 6.2759E-11, // F15760
1195 7.0801E-11, 7.4555E-11, 7.9754E-11, 8.7616E-11, 9.1171E-11, // F15770
1196 1.0349E-10, 1.1047E-10, 1.2024E-10, 1.2990E-10, 1.3725E-10, // F15780
1197 1.5005E-10, 1.5268E-10, 1.5535E-10, 1.5623E-10, 1.5009E-10, // F15790
1198 1.4034E-10, 1.3002E-10, 1.2225E-10, 1.1989E-10, 1.2411E-10, // F15800
1199 1.3612E-10, 1.5225E-10, 1.7202E-10, 1.9471E-10, 1.9931E-10, // F15810
1200 1.9079E-10, 1.7478E-10, 1.5259E-10, 1.2625E-10, 9.3332E-11, // F15820
1201 6.8796E-11, 4.6466E-11, 2.9723E-11, 1.8508E-11, 1.2106E-11, // F15830
1202 8.0142E-12, 5.4066E-12, 3.9329E-12, 3.1665E-12, 2.7420E-12, // F15850
1203 2.3996E-12, 2.3804E-12, 2.3242E-12, 2.4476E-12, 2.5331E-12, // F15860
1204 2.3595E-12, 2.2575E-12, 2.1298E-12, 2.0088E-12, 1.8263E-12, // F15870
1205 1.6114E-12, 1.4422E-12, 1.2946E-12, 1.0837E-12, 9.1282E-13, // F15880
1206 7.2359E-13, 5.3307E-13, 3.8837E-13, 2.6678E-13, 1.6769E-13, // F15890
1207 1.0826E-13, 7.2364E-14, 4.5201E-14, 3.0808E-14, 2.2377E-14, // F15900
1208 1.7040E-14, 9.2181E-15, 5.2934E-15, 3.5774E-15, 3.1431E-15, // F15910
1209 3.7647E-15, 5.6428E-15, 9.5139E-15, 1.7322E-14, 2.8829E-14, // F15920
1210 4.7708E-14, 6.9789E-14, 9.7267E-14, 1.4662E-13, 1.9429E-13, // F15930
1211 2.5998E-13, 3.6636E-13, 4.7960E-13, 6.5129E-13, 7.7638E-13, // F15940
1212 9.3774E-13, 1.1467E-12, 1.3547E-12, 1.5686E-12, 1.6893E-12, // F15960
1213 1.9069E-12, 2.1352E-12, 2.3071E-12, 2.4759E-12, 2.8247E-12, // F15970
1214 3.4365E-12, 4.3181E-12, 5.6107E-12, 7.0017E-12, 8.6408E-12, // F15980
1215 1.0974E-11, 1.3742E-11, 1.6337E-11, 2.0157E-11, 2.3441E-11, // F15990
1216 2.6733E-11, 3.0247E-11, 3.3737E-11, 3.8618E-11, 4.1343E-11, // F16000
1217 4.3870E-11, 4.4685E-11, 4.4881E-11, 4.5526E-11, 4.3628E-11, // F16010
1218 4.4268E-11, 4.6865E-11, 5.3426E-11, 5.4020E-11, 5.3218E-11, // F16020
1219 5.4587E-11, 5.6360E-11, 5.7740E-11, 5.6426E-11, 6.0399E-11, // F16030
1220 6.6981E-11, 7.4319E-11, 7.7977E-11, 7.5539E-11, 7.1610E-11, // F16040
1221 6.4606E-11, 5.5498E-11, 4.3944E-11, 3.3769E-11, 2.5771E-11, // F16050
1222 1.9162E-11, 1.3698E-11, 1.0173E-11, 7.8925E-12, 6.1938E-12, // F16070
1223 4.7962E-12, 4.0811E-12, 3.3912E-12, 2.8625E-12, 2.4504E-12, // F16080
1224 2.2188E-12, 2.2139E-12, 2.2499E-12, 2.2766E-12, 2.3985E-12, // F16090
1225 2.5459E-12, 2.9295E-12, 3.4196E-12, 3.6155E-12, 4.0733E-12, // F16100
1226 4.4610E-12, 4.9372E-12, 5.4372E-12, 5.7304E-12, 6.1640E-12, // F16110
1227 6.1278E-12, 6.2940E-12, 6.4947E-12, 6.8174E-12, 7.5190E-12, // F16120
1228 8.2608E-12, 8.4971E-12, 8.3484E-12, 8.1888E-12, 7.8552E-12, // F16130
1229 7.8468E-12, 7.5943E-12, 7.9096E-12, 8.6869E-12, 9.1303E-12, // F16140
1230 9.2547E-12, 8.9322E-12, 8.2177E-12, 7.3408E-12, 5.7956E-12, // F16150
1231 4.4470E-12, 3.5881E-12, 2.6748E-12, 1.7074E-12, 9.6700E-13, // F16160
1232 5.2645E-13, 2.9943E-13, 1.7316E-13, 1.0039E-13, 5.7859E-14, // F16180
1233 3.2968E-14, 1.8499E-14, 1.0192E-14, 5.5015E-15, 2.9040E-15, // F16190
1234 1.4968E-15, 7.5244E-16, 3.6852E-16, 1.7568E-16, 8.1464E-17, // F16200
1235 3.6717E-17, 1.6076E-17, 6.8341E-18, 2.8195E-18, 1.1286E-18, // F16210
1236 .0000E+00, .0000E+00, .0000E+00, .0000E+00, .0000E+00, // F16220
1237 .0000E+00, .0000E+00, .0000E+00, .0000E+00, 1.4070E-18, // F16230
1238 3.0405E-18, 6.4059E-18, 1.3169E-17, 2.6443E-17, 5.1917E-17, // F16240
1239 9.9785E-17, 1.8802E-16, 3.4788E-16, 6.3328E-16, 1.1370E-15, // F16250
1240 2.0198E-15, 3.5665E-15, 6.3053E-15, 1.1309E-14, 2.1206E-14, // F16260
1241 3.2858E-14, 5.5165E-14, 8.6231E-14, 1.2776E-13, 1.7780E-13, // F16270
1242 2.5266E-13, 3.6254E-13, 5.1398E-13, 6.8289E-13, 8.7481E-13, // F16290
1243 1.1914E-12, 1.6086E-12, 2.0469E-12, 2.5761E-12, 3.4964E-12, // F16300
1244 4.4980E-12, 5.5356E-12, 6.7963E-12, 8.5720E-12, 1.0700E-11, // F16310
1245 1.2983E-11, 1.6270E-11, 1.9609E-11, 2.2668E-11, 2.5963E-11, // F16320
1246 3.0918E-11, 3.4930E-11, 3.9330E-11, 4.4208E-11, 4.6431E-11, // F16330
1247 5.1141E-11, 5.4108E-11, 5.8077E-11, 6.5050E-11, 7.2126E-11, // F16340
1248 8.1064E-11, 8.1973E-11, 8.1694E-11, 8.3081E-11, 8.0240E-11, // F16350
1249 7.9225E-11, 7.6256E-11, 7.8468E-11, 8.0041E-11, 8.1585E-11, // F16360
1250 8.3485E-11, 8.3774E-11, 8.5870E-11, 8.6104E-11, 8.8516E-11, // F16370
1251 9.0814E-11, 9.2522E-11, 8.8913E-11, 7.8381E-11, 6.8568E-11, // F16380
1252 5.6797E-11, 4.4163E-11, 3.2369E-11, 2.3259E-11, 1.6835E-11, // F16400
1253 1.1733E-11, 8.5273E-12, 6.3805E-12, 4.8983E-12, 3.8831E-12, // F16410
1254 3.2610E-12, 2.8577E-12, 2.5210E-12, 2.2913E-12, 2.0341E-12, // F16420
1255 1.8167E-12, 1.6395E-12, 1.4890E-12, 1.3516E-12, 1.2542E-12, // F16430
1256 1.2910E-12, 1.3471E-12, 1.4689E-12, 1.5889E-12, 1.6989E-12, // F16440
1257 1.8843E-12, 2.0902E-12, 2.3874E-12, 2.7294E-12, 3.3353E-12, // F16450
1258 4.0186E-12, 4.5868E-12, 5.2212E-12, 5.8856E-12, 6.5991E-12, // F16460
1259 7.2505E-12, 7.6637E-12, 8.5113E-12, 9.4832E-12, 9.9678E-12, // F16470
1260 1.0723E-11, 1.0749E-11, 1.1380E-11, 1.1774E-11, 1.1743E-11, // F16480
1261 1.2493E-11, 1.2559E-11, 1.2332E-11, 1.1782E-11, 1.1086E-11, // F16490
1262 1.0945E-11, 1.1178E-11, 1.2083E-11, 1.3037E-11, 1.4730E-11, // F16510
1263 1.6450E-11, 1.7403E-11, 1.7004E-11, 1.5117E-11, 1.3339E-11, // F16520
1264 1.0844E-11, 8.0915E-12, 5.6615E-12, 3.7196E-12, 2.5194E-12, // F16530
1265 1.6569E-12, 1.1201E-12, 8.2335E-13, 6.0270E-13, 4.8205E-13, // F16540
1266 4.1313E-13, 3.6243E-13, 3.2575E-13, 2.7730E-13, 2.5292E-13, // F16550
1267 2.3062E-13, 2.1126E-13, 2.1556E-13, 2.1213E-13, 2.2103E-13, // F16560
1268 2.1927E-13, 2.0794E-13, 1.9533E-13, 1.6592E-13, 1.4521E-13, // F16570
1269 1.1393E-13, 8.3772E-14, 6.2077E-14, 4.3337E-14, 2.7165E-14, // F16580
1270 1.6821E-14, 9.5407E-15, 5.3093E-15, 3.0320E-15, 1.7429E-15, // F16590
1271 9.9828E-16, 5.6622E-16, 3.1672E-16, 1.7419E-16, 9.3985E-17, // F16600
1272 4.9656E-17, 2.5652E-17, 1.2942E-17, 6.3695E-18, 3.0554E-18, // F16620
1273 1.4273E-18, -0. , -0. , -0. , -0. , // F16630
1274 -0. , 0. , 0. , 0. , 0. , // F16640
1275 0. , 0. , 0. , 0. , 0. , // F16650
1276 0. , 0. , 0. , 0. , 0. , // F16660
1277 0. , 0. , 0. , 0. , 0. , // F16670
1278 0. , 0. , 0. , 0. , 0. , // F16680
1279 0. , 0. , 0. , 0. , 0. , // F16690
1280 0. , 0. , 0. , 0. , 0. , // F16700
1281 0. , 0. , 0. , 0. , 0. , // F16710
1282 0. , 0. , 0. , 0. , 0. , // F16730
1283 0. , 0. , 0. , 0. , 0. , // F16740
1284 0. , 0. , 0. , 0. , 0. , // F16750
1285 0. , 0. , 0. , 0. , 0. , // F16760
1286 0. , 0. , 0. , 0. , 0. , // F16770
1287 0. , 0. , 0. , 0. , 0. , // F16780
1288 0. , 0. , 0. , 0. , 0. , // F16790
1289 0. , 0. , 0. , 0. , 0. , // F16800
1290 0. , 0. , 0. , 0. , 0. , // F16810
1291 0. , 0. , 0. , 0. , 0. , // F16820
1292 0. , 0. , 0. , 0. , 0. , // F16840
1293 0. , 0. , 0. , 0. , 0. , // F16850
1294 0. , 0. , 0. , 0. , 0. , // F16860
1295 0. , 0. , 0. , 0. , 0. , // F16870
1296 0. , 0. , 0. , 0. , 0. , // F16880
1297 0. , 0. , 0. , 0. , 0. , // F16890
1298 0. , 0. , 0. , 0. , 0. , // F16900
1299 0. , 0. , 0. , 0. , 0. , // F16910
1300 0. , 0. , 0. , 0. , 0. , // F16920
1301 0. , 0. , 0. , 0. , 0. , // F16930
1302 0. , 0. , 0. , 0. , 0. , // F16950
1303 0. , 0. , 0. , 0. , 0. , // F16960
1304 0. , 0. , 0. , 0. , 0. , // F16970
1305 0. , 0. , 0. , 0. , 0. , // F16980
1306 0. , 0. , 0. , 0. , 0. , // F16990
1307 0. , 0. , 0. , 0. , 0. , // F17000
1308 0. , 0. , 0. , 0. , 0. , // F17010
1309 0. , 0. , 0. , 0. , 0. , // F17020
1310 0. , 0. , 0. , 0. , 0. , // F17030
1311 0. , 0. , 0. , 0. , 0. , // F17040
1312 0.};
1313
1314
1315
1316
1317
1318
1319// H2O self continuum parameters at T=260 K for the CKD versions 0 to 2.4.2
1320// date of last update: 06/28/82
1321// units of (CM**3/MOL)*1.E-20
1322const Numeric SL260_ckd_0_v1 = -20.0;
1323const Numeric SL260_ckd_0_v2 = 20000.0;
1324const Numeric SL260_ckd_0_dv = 10.0;
1325const int SL260_ckd_0_npt = 2003;
1326const double SL260_ckd_0[SL260_ckd_0_npt+addF77fields] = {
1327 0.0000e-00, 1.7750e-01, 1.7045e-01,
1328 1.6457e-01, 1.7045e-01, 1.7750e-01, 2.0036e-01, 2.1347e-01, // f07700
1329 2.2454e-01, 2.3428e-01, 2.3399e-01, 2.3022e-01, 2.0724e-01, // f07710
1330 1.9712e-01, 1.8317e-01, 1.6724e-01, 1.4780e-01, 1.2757e-01, // f07720
1331 1.1626e-01, 1.0098e-01, 8.9033e-02, 7.9770e-02, 6.7416e-02, // f07730
1332 5.9588e-02, 5.1117e-02, 4.6218e-02, 4.2179e-02, 3.4372e-02, // f07740
1333 2.9863e-02, 2.5252e-02, 2.2075e-02, 1.9209e-02, 1.5816e-02, // f07750
1334 1.3932e-02, 1.1943e-02, 1.0079e-02, 8.7667e-03, 7.4094e-03, // f07760
1335 6.4967e-03, 5.5711e-03, 4.8444e-03, 4.2552e-03, 3.6953e-03, // f07770
1336 3.2824e-03, 2.9124e-03, 2.6102e-03, 2.3370e-03, 2.1100e-03, // f07780
1337 1.9008e-03, 1.7145e-03, 1.5573e-03, 1.4206e-03, 1.2931e-03, // f07790
1338 1.1803e-03, 1.0774e-03, 9.8616e-04, 9.0496e-04, 8.3071e-04, // f07810
1339 7.6319e-04, 7.0149e-04, 6.4637e-04, 5.9566e-04, 5.4987e-04, // f07820
1340 5.0768e-04, 4.6880e-04, 4.3317e-04, 4.0037e-04, 3.7064e-04, // f07830
1341 3.4325e-04, 3.1809e-04, 2.9501e-04, 2.7382e-04, 2.5430e-04, // f07840
1342 2.3630e-04, 2.1977e-04, 2.0452e-04, 1.9042e-04, 1.7740e-04, // f07850
1343 1.6544e-04, 1.5442e-04, 1.4425e-04, 1.3486e-04, 1.2618e-04, // f07860
1344 1.1817e-04, 1.1076e-04, 1.0391e-04, 9.7563e-05, 9.1696e-05, // f07870
1345 8.6272e-05, 8.1253e-05, 7.6607e-05, 7.2302e-05, 6.8311e-05, // f07880
1346 6.4613e-05, 6.1183e-05, 5.8001e-05, 5.5048e-05, 5.2307e-05, // f07890
1347 4.9761e-05, 4.7395e-05, 4.5197e-05, 4.3155e-05, 4.1256e-05, // f07900
1348 3.9491e-05, 3.7849e-05, 3.6324e-05, 3.4908e-05, 3.3594e-05, // f07920
1349 3.2374e-05, 3.1244e-05, 3.0201e-05, 2.9240e-05, 2.8356e-05, // f07930
1350 2.7547e-05, 2.6814e-05, 2.6147e-05, 2.5551e-05, 2.5029e-05, // f07940
1351 2.4582e-05, 2.4203e-05, 2.3891e-05, 2.3663e-05, 2.3531e-05, // f07950
1352 2.3483e-05, 2.3516e-05, 2.3694e-05, 2.4032e-05, 2.4579e-05, // f07960
1353 2.5234e-05, 2.6032e-05, 2.7119e-05, 2.8631e-05, 3.0848e-05, // f07970
1354 3.3262e-05, 3.6635e-05, 4.0732e-05, 4.5923e-05, 5.3373e-05, // f07980
1355 6.1875e-05, 7.2031e-05, 8.5980e-05, 9.8642e-05, 1.1469e-04, // f07990
1356 1.3327e-04, 1.5390e-04, 1.7513e-04, 2.0665e-04, 2.3609e-04, // f08000
1357 2.6220e-04, 2.8677e-04, 3.2590e-04, 3.8624e-04, 4.1570e-04, // f08010
1358 4.5207e-04, 4.9336e-04, 5.4500e-04, 5.8258e-04, 5.8086e-04, // f08030
1359 5.6977e-04, 5.3085e-04, 4.8020e-04, 4.3915e-04, 4.0343e-04, // f08040
1360 3.7853e-04, 3.7025e-04, 3.9637e-04, 4.4675e-04, 4.7072e-04, // f08050
1361 4.9022e-04, 5.2076e-04, 5.3676e-04, 5.2755e-04, 4.8244e-04, // f08060
1362 4.5473e-04, 4.3952e-04, 3.9614e-04, 3.4086e-04, 2.9733e-04, // f08070
1363 2.6367e-04, 2.3767e-04, 2.0427e-04, 1.7595e-04, 1.5493e-04, // f08080
1364 1.3851e-04, 1.1874e-04, 1.0735e-04, 9.0490e-05, 8.1149e-05, // f08090
1365 7.4788e-05, 6.5438e-05, 5.8248e-05, 4.8076e-05, 4.3488e-05, // f08100
1366 3.7856e-05, 3.3034e-05, 2.9592e-05, 2.6088e-05, 2.3497e-05, // f08110
1367 2.0279e-05, 1.7526e-05, 1.5714e-05, 1.3553e-05, 1.2145e-05, // f08120
1368 1.0802e-05, 9.7681e-06, 8.8196e-06, 7.8291e-06, 7.1335e-06, // f08140
1369 6.4234e-06, 5.8391e-06, 5.3532e-06, 4.9079e-06, 4.5378e-06, // f08150
1370 4.1716e-06, 3.8649e-06, 3.5893e-06, 3.3406e-06, 3.1199e-06, // f08160
1371 2.9172e-06, 2.7348e-06, 2.5644e-06, 2.4086e-06, 2.2664e-06, // f08170
1372 2.1359e-06, 2.0159e-06, 1.9051e-06, 1.8031e-06, 1.7074e-06, // f08180
1373 1.6185e-06, 1.5356e-06, 1.4584e-06, 1.3861e-06, 1.3179e-06, // f08190
1374 1.2545e-06, 1.1951e-06, 1.1395e-06, 1.0873e-06, 1.0384e-06, // f08200
1375 9.9250e-07, 9.4935e-07, 9.0873e-07, 8.7050e-07, 8.3446e-07, // f08210
1376 8.0046e-07, 7.6834e-07, 7.3800e-07, 7.0931e-07, 6.8217e-07, // f08220
1377 6.5648e-07, 6.3214e-07, 6.0909e-07, 5.8725e-07, 5.6655e-07, // f08230
1378 5.4693e-07, 5.2835e-07, 5.1077e-07, 4.9416e-07, 4.7853e-07, // f08250
1379 4.6381e-07, 4.5007e-07, 4.3728e-07, 4.2550e-07, 4.1450e-07, // f08260
1380 4.0459e-07, 3.9532e-07, 3.8662e-07, 3.7855e-07, 3.7041e-07, // f08270
1381 3.6254e-07, 3.5420e-07, 3.4617e-07, 3.3838e-07, 3.3212e-07, // f08280
1382 3.2655e-07, 3.1865e-07, 3.1203e-07, 3.0670e-07, 3.0252e-07, // f08290
1383 2.9749e-07, 2.9184e-07, 2.8795e-07, 2.8501e-07, 2.8202e-07, // f08300
1384 2.7856e-07, 2.7509e-07, 2.7152e-07, 2.6844e-07, 2.6642e-07, // f08310
1385 2.6548e-07, 2.6617e-07, 2.6916e-07, 2.7372e-07, 2.8094e-07, // f08320
1386 2.9236e-07, 3.1035e-07, 3.2854e-07, 3.5481e-07, 3.9377e-07, // f08330
1387 4.4692e-07, 5.0761e-07, 5.7715e-07, 6.7725e-07, 8.0668e-07, // f08340
1388 9.3716e-07, 1.0797e-06, 1.1689e-06, 1.3217e-06, 1.4814e-06, // f08360
1389 1.5627e-06, 1.6519e-06, 1.7601e-06, 1.9060e-06, 2.0474e-06, // f08370
1390 2.0716e-06, 2.0433e-06, 1.9752e-06, 1.8466e-06, 1.7526e-06, // f08380
1391 1.6657e-06, 1.5870e-06, 1.5633e-06, 1.6520e-06, 1.8471e-06, // f08390
1392 1.9953e-06, 2.0975e-06, 2.2016e-06, 2.2542e-06, 2.3081e-06, // f08400
1393 2.3209e-06, 2.2998e-06, 2.3056e-06, 2.2757e-06, 2.2685e-06, // f08410
1394 2.2779e-06, 2.2348e-06, 2.2445e-06, 2.3174e-06, 2.4284e-06, // f08420
1395 2.5290e-06, 2.7340e-06, 2.9720e-06, 3.2332e-06, 3.5392e-06, // f08430
1396 3.9013e-06, 4.3334e-06, 4.9088e-06, 5.3428e-06, 5.9142e-06, // f08440
1397 6.6106e-06, 7.4709e-06, 8.5019e-06, 9.6835e-06, 1.0984e-05, // f08450
1398 1.2831e-05, 1.4664e-05, 1.7080e-05, 2.0103e-05, 2.4148e-05, // f08470
1399 2.7948e-05, 3.2855e-05, 3.9046e-05, 4.6429e-05, 5.6633e-05, // f08480
1400 6.6305e-05, 7.6048e-05, 8.7398e-05, 1.0034e-04, 1.1169e-04, // f08490
1401 1.2813e-04, 1.3354e-04, 1.3952e-04, 1.4204e-04, 1.4615e-04, // f08500
1402 1.5144e-04, 1.5475e-04, 1.6561e-04, 1.7135e-04, 1.6831e-04, // f08510
1403 1.6429e-04, 1.6353e-04, 1.6543e-04, 1.5944e-04, 1.5404e-04, // f08520
1404 1.5458e-04, 1.6287e-04, 1.7277e-04, 1.8387e-04, 1.7622e-04, // f08530
1405 1.6360e-04, 1.5273e-04, 1.3667e-04, 1.2364e-04, 9.7576e-05, // f08540
1406 7.9140e-05, 6.4241e-05, 5.1826e-05, 4.1415e-05, 3.1347e-05, // f08550
1407 2.5125e-05, 2.0027e-05, 1.6362e-05, 1.3364e-05, 1.1117e-05, // f08560
1408 9.4992e-06, 8.1581e-06, 7.1512e-06, 6.2692e-06, 5.5285e-06, // f08580
1409 4.9000e-06, 4.3447e-06, 3.8906e-06, 3.4679e-06, 3.1089e-06, // f08590
1410 2.8115e-06, 2.5496e-06, 2.2982e-06, 2.0861e-06, 1.8763e-06, // f08600
1411 1.7035e-06, 1.5548e-06, 1.4107e-06, 1.2839e-06, 1.1706e-06, // f08610
1412 1.0709e-06, 9.8099e-07, 8.9901e-07, 8.2394e-07, 7.5567e-07, // f08620
1413 6.9434e-07, 6.3867e-07, 5.8845e-07, 5.4263e-07, 5.0033e-07, // f08630
1414 4.6181e-07, 4.2652e-07, 3.9437e-07, 3.6497e-07, 3.3781e-07, // f08640
1415 3.1292e-07, 2.9011e-07, 2.6915e-07, 2.4989e-07, 2.3215e-07, // f08650
1416 2.1582e-07, 2.0081e-07, 1.8700e-07, 1.7432e-07, 1.6264e-07, // f08660
1417 1.5191e-07, 1.4207e-07, 1.3306e-07, 1.2484e-07, 1.1737e-07, // f08670
1418 1.1056e-07, 1.0451e-07, 9.9060e-08, 9.4135e-08, 8.9608e-08, // f08690
1419 8.5697e-08, 8.1945e-08, 7.8308e-08, 7.4808e-08, 7.1686e-08, // f08700
1420 6.8923e-08, 6.5869e-08, 6.3308e-08, 6.0840e-08, 5.8676e-08, // f08710
1421 5.6744e-08, 5.5016e-08, 5.3813e-08, 5.2792e-08, 5.2097e-08, // f08720
1422 5.1737e-08, 5.1603e-08, 5.1656e-08, 5.1989e-08, 5.2467e-08, // f08730
1423 5.2918e-08, 5.3589e-08, 5.4560e-08, 5.5869e-08, 5.7403e-08, // f08740
1424 5.8968e-08, 6.0973e-08, 6.3432e-08, 6.6245e-08, 6.9353e-08, // f08750
1425 7.2686e-08, 7.6541e-08, 8.0991e-08, 8.5950e-08, 9.1429e-08, // f08760
1426 9.7851e-08, 1.0516e-07, 1.1349e-07, 1.2295e-07, 1.3335e-07, // f08770
1427 1.4488e-07, 1.5864e-07, 1.7412e-07, 1.9140e-07, 2.1078e-07, // f08780
1428 2.3369e-07, 2.5996e-07, 2.8848e-07, 3.2169e-07, 3.5991e-07, // f08800
1429 4.0566e-07, 4.5969e-07, 5.3094e-07, 6.1458e-07, 7.1155e-07, // f08810
1430 8.3045e-07, 9.9021e-07, 1.2042e-06, 1.4914e-06, 1.8145e-06, // f08820
1431 2.2210e-06, 2.7831e-06, 3.4533e-06, 4.4446e-06, 5.1989e-06, // f08830
1432 6.2289e-06, 7.1167e-06, 8.3949e-06, 9.6417e-06, 1.0313e-05, // f08840
1433 1.0485e-05, 1.0641e-05, 1.0898e-05, 1.0763e-05, 1.0506e-05, // f08850
1434 1.0497e-05, 1.1696e-05, 1.2654e-05, 1.3029e-05, 1.3175e-05, // f08860
1435 1.4264e-05, 1.4985e-05, 1.4999e-05, 1.4317e-05, 1.4616e-05, // f08870
1436 1.4963e-05, 1.5208e-05, 1.4942e-05, 1.3879e-05, 1.3087e-05, // f08880
1437 1.1727e-05, 1.0515e-05, 9.0073e-06, 7.3133e-06, 6.1181e-06, // f08890
1438 5.0623e-06, 4.1105e-06, 3.3915e-06, 2.6711e-06, 2.1464e-06, // f08910
1439 1.7335e-06, 1.4302e-06, 1.1847e-06, 9.9434e-07, 8.2689e-07, // f08920
1440 7.0589e-07, 6.0750e-07, 5.3176e-07, 4.6936e-07, 4.1541e-07, // f08930
1441 3.6625e-07, 3.2509e-07, 2.9156e-07, 2.6308e-07, 2.3819e-07, // f08940
1442 2.1421e-07, 1.9366e-07, 1.7626e-07, 1.5982e-07, 1.4567e-07, // f08950
1443 1.3354e-07, 1.2097e-07, 1.1029e-07, 1.0063e-07, 9.2003e-08, // f08960
1444 8.4245e-08, 7.7004e-08, 7.0636e-08, 6.4923e-08, 5.9503e-08, // f08970
1445 5.4742e-08, 5.0450e-08, 4.6470e-08, 4.2881e-08, 3.9550e-08, // f08980
1446 3.6541e-08, 3.3803e-08, 3.1279e-08, 2.8955e-08, 2.6858e-08, // f08990
1447 2.4905e-08, 2.3146e-08, 2.1539e-08, 2.0079e-08, 1.8746e-08, // f09000
1448 1.7517e-08, 1.6396e-08, 1.5369e-08, 1.4426e-08, 1.3543e-08, // f09020
1449 1.2724e-08, 1.1965e-08, 1.1267e-08, 1.0617e-08, 1.0010e-08, // f09030
1450 9.4662e-09, 8.9553e-09, 8.4988e-09, 8.0807e-09, 7.7043e-09, // f09040
1451 7.3721e-09, 7.0707e-09, 6.8047e-09, 6.5702e-09, 6.3634e-09, // f09050
1452 6.1817e-09, 6.0239e-09, 5.8922e-09, 5.7824e-09, 5.7019e-09, // f09060
1453 5.6368e-09, 5.5940e-09, 5.5669e-09, 5.5583e-09, 5.5653e-09, // f09070
1454 5.5837e-09, 5.6243e-09, 5.6883e-09, 5.7800e-09, 5.8964e-09, // f09080
1455 6.0429e-09, 6.2211e-09, 6.4282e-09, 6.6634e-09, 6.9306e-09, // f09090
1456 7.2336e-09, 7.5739e-09, 7.9562e-09, 8.3779e-09, 8.8575e-09, // f09100
1457 9.3992e-09, 1.0004e-08, 1.0684e-08, 1.1450e-08, 1.2320e-08, // f09110
1458 1.3311e-08, 1.4455e-08, 1.5758e-08, 1.7254e-08, 1.8927e-08, // f09130
1459 2.0930e-08, 2.3348e-08, 2.6074e-08, 2.9221e-08, 3.2770e-08, // f09140
1460 3.7485e-08, 4.2569e-08, 4.8981e-08, 5.5606e-08, 6.2393e-08, // f09150
1461 7.1901e-08, 8.2921e-08, 9.5513e-08, 1.1111e-07, 1.3143e-07, // f09160
1462 1.5971e-07, 1.8927e-07, 2.2643e-07, 2.7860e-07, 3.2591e-07, // f09170
1463 3.7024e-07, 4.2059e-07, 4.9432e-07, 5.5543e-07, 5.7498e-07, // f09180
1464 5.9210e-07, 6.1005e-07, 6.1577e-07, 5.9193e-07, 5.6602e-07, // f09190
1465 5.7403e-07, 6.0050e-07, 6.4723e-07, 6.7073e-07, 7.5415e-07, // f09200
1466 8.0982e-07, 8.7658e-07, 9.1430e-07, 9.4459e-07, 9.8347e-07, // f09210
1467 9.8768e-07, 1.0153e-06, 1.0066e-06, 1.0353e-06, 1.0353e-06, // f09220
1468 1.0722e-06, 1.1138e-06, 1.1923e-06, 1.2947e-06, 1.4431e-06, // f09240
1469 1.6537e-06, 1.8662e-06, 2.2473e-06, 2.6464e-06, 3.1041e-06, // f09250
1470 3.4858e-06, 4.0167e-06, 4.6675e-06, 5.0983e-06, 5.7997e-06, // f09260
1471 6.0503e-06, 6.4687e-06, 6.5396e-06, 6.7986e-06, 7.0244e-06, // f09270
1472 7.2305e-06, 7.6732e-06, 7.9783e-06, 7.9846e-06, 7.7617e-06, // f09280
1473 7.7657e-06, 7.7411e-06, 7.8816e-06, 7.8136e-06, 8.0051e-06, // f09290
1474 8.5799e-06, 9.1659e-06, 9.8646e-06, 9.4920e-06, 8.7670e-06, // f09300
1475 8.2034e-06, 7.2297e-06, 6.2324e-06, 4.9315e-06, 3.9128e-06, // f09310
1476 3.1517e-06, 2.4469e-06, 1.8815e-06, 1.4627e-06, 1.1698e-06, // f09320
1477 9.4686e-07, 7.8486e-07, 6.6970e-07, 5.8811e-07, 5.2198e-07, // f09330
1478 4.6809e-07, 4.1671e-07, 3.7006e-07, 3.3066e-07, 2.9387e-07, // f09350
1479 2.6415e-07, 2.3409e-07, 2.0991e-07, 1.9132e-07, 1.7519e-07, // f09360
1480 1.5939e-07, 1.4368e-07, 1.3050e-07, 1.1883e-07, 1.0772e-07, // f09370
1481 9.6884e-08, 8.7888e-08, 7.8956e-08, 7.1024e-08, 6.3824e-08, // f09380
1482 5.7256e-08, 5.1769e-08, 4.7037e-08, 4.2901e-08, 3.8970e-08, // f09390
1483 3.5467e-08, 3.2502e-08, 2.9827e-08, 2.7389e-08, 2.5111e-08, // f09400
1484 2.3056e-08, 2.1267e-08, 1.9610e-08, 1.8133e-08, 1.6775e-08, // f09410
1485 1.5491e-08, 1.4329e-08, 1.3265e-08, 1.2300e-08, 1.1420e-08, // f09420
1486 1.0593e-08, 9.8475e-09, 9.1585e-09, 8.5256e-09, 7.9525e-09, // f09430
1487 7.4226e-09, 6.9379e-09, 6.4950e-09, 6.0911e-09, 5.7242e-09, // f09440
1488 5.3877e-09, 5.0821e-09, 4.8051e-09, 4.5554e-09, 4.3315e-09, // f09460
1489 4.1336e-09, 3.9632e-09, 3.8185e-09, 3.7080e-09, 3.6296e-09, // f09470
1490 3.5804e-09, 3.5776e-09, 3.6253e-09, 3.7115e-09, 3.8151e-09, // f09480
1491 3.9804e-09, 4.1742e-09, 4.3581e-09, 4.5306e-09, 4.7736e-09, // f09490
1492 5.1297e-09, 5.5291e-09, 5.9125e-09, 6.4956e-09, 7.0362e-09, // f09500
1493 7.5318e-09, 7.9947e-09, 8.6438e-09, 9.7227e-09, 1.0130e-08, // f09510
1494 1.0549e-08, 1.1064e-08, 1.1702e-08, 1.2043e-08, 1.1781e-08, // f09520
1495 1.1838e-08, 1.1917e-08, 1.2131e-08, 1.2476e-08, 1.3611e-08, // f09530
1496 1.4360e-08, 1.5057e-08, 1.6247e-08, 1.7284e-08, 1.8420e-08, // f09540
1497 1.8352e-08, 1.8722e-08, 1.9112e-08, 1.9092e-08, 1.9311e-08, // f09550
1498 1.9411e-08, 1.9884e-08, 2.0508e-08, 2.1510e-08, 2.3143e-08, // f09570
1499 2.5050e-08, 2.7596e-08, 3.1231e-08, 3.6260e-08, 4.3410e-08, // f09580
1500 5.2240e-08, 6.3236e-08, 7.7522e-08, 9.8688e-08, 1.1859e-07, // f09590
1501 1.4341e-07, 1.6798e-07, 1.9825e-07, 2.2898e-07, 2.6257e-07, // f09600
1502 2.9884e-07, 3.3247e-07, 3.4936e-07, 3.5583e-07, 3.7150e-07, // f09610
1503 3.6580e-07, 3.7124e-07, 3.7030e-07, 4.1536e-07, 4.6656e-07, // f09620
1504 4.6677e-07, 4.7507e-07, 4.9653e-07, 5.3795e-07, 5.4957e-07, // f09630
1505 5.2238e-07, 5.4690e-07, 5.6569e-07, 5.9844e-07, 5.9835e-07, // f09640
1506 5.6522e-07, 5.4123e-07, 4.7904e-07, 4.2851e-07, 3.5603e-07, // f09650
1507 2.8932e-07, 2.3655e-07, 1.8592e-07, 1.4943e-07, 1.1971e-07, // f09660
1508 9.8482e-08, 8.3675e-08, 7.1270e-08, 6.2496e-08, 5.4999e-08, // f09680
1509 4.9821e-08, 4.5387e-08, 4.1340e-08, 3.7453e-08, 3.3298e-08, // f09690
1510 3.0120e-08, 2.7032e-08, 2.4236e-08, 2.1500e-08, 1.8988e-08, // f09700
1511 1.7414e-08, 1.5706e-08, 1.4192e-08, 1.3204e-08, 1.1759e-08, // f09710
1512 1.0737e-08, 9.6309e-09, 8.8179e-09, 8.2619e-09, 7.2264e-09, // f09720
1513 6.4856e-09, 5.8037e-09, 5.2093e-09, 4.7205e-09, 4.1749e-09, // f09730
1514 3.7852e-09, 3.3915e-09, 3.0089e-09, 2.7335e-09, 2.4398e-09, // f09740
1515 2.2031e-09, 1.9786e-09, 1.7890e-09, 1.6266e-09, 1.4830e-09, // f09750
1516 1.3576e-09, 1.2518e-09, 1.1587e-09, 1.0726e-09, 9.9106e-10, // f09760
1517 9.1673e-10, 8.5084e-10, 7.9147e-10, 7.2882e-10, 6.7342e-10, // f09770
1518 6.2593e-10, 5.8294e-10, 5.4435e-10, 5.0997e-10, 4.7806e-10, // f09790
1519 4.4931e-10, 4.2357e-10, 4.0023e-10, 3.7909e-10, 3.5999e-10, // f09800
1520 3.4285e-10, 3.2776e-10, 3.1468e-10, 3.0377e-10, 2.9479e-10, // f09810
1521 2.8877e-10, 2.8512e-10, 2.8617e-10, 2.8976e-10, 3.0001e-10, // f09820
1522 3.1718e-10, 3.3898e-10, 3.5857e-10, 3.8358e-10, 4.3131e-10, // f09830
1523 4.5741e-10, 4.6948e-10, 4.7594e-10, 4.9529e-10, 5.1563e-10, // f09840
1524 4.9475e-10, 4.8369e-10, 4.8829e-10, 5.0047e-10, 5.0203e-10, // f09850
1525 5.1954e-10, 5.5352e-10, 5.9928e-10, 6.7148e-10, 7.1121e-10, // f09860
1526 7.4317e-10, 7.6039e-10, 7.8313e-10, 8.0684e-10, 7.8553e-10, // f09870
1527 7.8312e-10, 7.8537e-10, 7.8872e-10, 8.0185e-10, 8.1004e-10, // f09880
1528 8.2608e-10, 8.2525e-10, 8.3857e-10, 8.7920e-10, 9.2451e-10, // f09900
1529 9.8661e-10, 1.0629e-09, 1.1659e-09, 1.2922e-09, 1.4387e-09, // f09910
1530 1.6254e-09, 1.8425e-09, 2.1428e-09, 2.5477e-09, 3.0379e-09, // f09920
1531 3.7570e-09, 4.4354e-09, 5.1802e-09, 6.2769e-09, 7.4894e-09, // f09930
1532 8.7474e-09, 9.8037e-09, 1.1582e-08, 1.3293e-08, 1.4471e-08, // f09940
1533 1.5025e-08, 1.5580e-08, 1.6228e-08, 1.6413e-08, 1.6020e-08, // f09950
1534 1.6393e-08, 1.7545e-08, 1.9590e-08, 2.1449e-08, 2.3856e-08, // f09960
1535 2.7050e-08, 3.0214e-08, 3.3733e-08, 3.6487e-08, 3.9353e-08, // f09970
1536 4.2660e-08, 4.6385e-08, 4.9955e-08, 5.5313e-08, 6.0923e-08, // f09980
1537 6.8948e-08, 7.3649e-08, 8.2602e-08, 9.2212e-08, 9.9080e-08, // f09990
1538 1.1319e-07, 1.1790e-07, 1.2941e-07, 1.3199e-07, 1.3914e-07, // f10010
1539 1.4843e-07, 1.5300e-07, 1.6419e-07, 1.7095e-07, 1.6988e-07, // f10020
1540 1.6494e-07, 1.6327e-07, 1.6067e-07, 1.6909e-07, 1.7118e-07, // f10030
1541 1.8106e-07, 1.9857e-07, 2.1696e-07, 2.3385e-07, 2.2776e-07, // f10040
1542 2.1402e-07, 1.9882e-07, 1.7362e-07, 1.4308e-07, 1.1158e-07, // f10050
1543 8.8781e-08, 6.8689e-08, 5.2062e-08, 4.0427e-08, 3.2669e-08, // f10060
1544 2.7354e-08, 2.3200e-08, 2.0580e-08, 1.8676e-08, 1.7329e-08, // f10070
1545 1.6621e-08, 1.6433e-08, 1.6953e-08, 1.7134e-08, 1.7948e-08, // f10080
1546 1.9107e-08, 1.9875e-08, 2.1416e-08, 2.1556e-08, 2.2265e-08, // f10090
1547 2.2171e-08, 2.2534e-08, 2.3029e-08, 2.2828e-08, 2.3143e-08, // f10100
1548 2.2965e-08, 2.2223e-08, 2.1108e-08, 2.0265e-08, 1.9516e-08, // f10120
1549 1.9941e-08, 2.0312e-08, 2.1080e-08, 2.2611e-08, 2.4210e-08, // f10130
1550 2.6069e-08, 2.5097e-08, 2.3318e-08, 2.1543e-08, 1.8942e-08, // f10140
1551 1.5960e-08, 1.2386e-08, 9.9340e-09, 7.7502e-09, 5.9462e-09, // f10150
1552 4.5113e-09, 3.5523e-09, 2.8844e-09, 2.3394e-09, 1.9584e-09, // f10160
1553 1.6749e-09, 1.4624e-09, 1.2809e-09, 1.1359e-09, 1.0087e-09, // f10170
1554 9.0166e-10, 8.1079e-10, 7.2219e-10, 6.4922e-10, 5.8803e-10, // f10180
1555 5.3290e-10, 4.8590e-10, 4.4111e-10, 4.0184e-10, 3.6644e-10, // f10190
1556 3.3529e-10, 3.0789e-10, 2.8286e-10, 2.6089e-10, 2.4125e-10, // f10200
1557 2.2355e-10, 2.0783e-10, 1.9370e-10, 1.8088e-10, 1.6948e-10, // f10210
1558 1.5929e-10, 1.5013e-10, 1.4193e-10, 1.3470e-10, 1.2841e-10, // f10230
1559 1.2307e-10, 1.1865e-10, 1.1502e-10, 1.1243e-10, 1.1099e-10, // f10240
1560 1.1066e-10, 1.1216e-10, 1.1529e-10, 1.2171e-10, 1.3128e-10, // f10250
1561 1.4153e-10, 1.5962e-10, 1.8048e-10, 2.0936e-10, 2.3165e-10, // f10260
1562 2.5746e-10, 2.9600e-10, 3.3707e-10, 3.5267e-10, 3.5953e-10, // f10270
1563 3.6822e-10, 3.8363e-10, 3.8286e-10, 3.5883e-10, 3.6154e-10, // f10280
1564 3.6653e-10, 3.8507e-10, 4.0250e-10, 4.4435e-10, 4.9889e-10, // f10290
1565 5.6932e-10, 6.3599e-10, 7.0281e-10, 7.5777e-10, 8.1279e-10, // f10300
1566 8.8910e-10, 9.3400e-10, 1.0076e-09, 1.0945e-09, 1.1898e-09, // f10310
1567 1.3108e-09, 1.4725e-09, 1.7028e-09, 1.9619e-09, 2.3527e-09, // f10320
1568 2.6488e-09, 3.0327e-09, 3.4396e-09, 3.8797e-09, 4.4115e-09, // f10340
1569 4.6853e-09, 4.9553e-09, 4.9551e-09, 5.1062e-09, 5.0996e-09, // f10350
1570 5.1119e-09, 5.2283e-09, 5.8297e-09, 6.3439e-09, 6.2675e-09, // f10360
1571 6.3296e-09, 6.5173e-09, 7.1685e-09, 7.0528e-09, 6.8856e-09, // f10370
1572 7.3182e-09, 7.6990e-09, 8.3461e-09, 8.1946e-09, 7.7153e-09, // f10380
1573 7.2411e-09, 6.4511e-09, 5.7336e-09, 4.6105e-09, 3.6962e-09, // f10390
1574 2.9944e-09, 2.4317e-09, 1.9399e-09, 1.5331e-09, 1.2633e-09, // f10400
1575 1.0613e-09, 9.0136e-10, 7.9313e-10, 7.1543e-10, 6.6485e-10, // f10410
1576 6.4225e-10, 6.3980e-10, 6.4598e-10, 6.7428e-10, 7.0270e-10, // f10420
1577 7.4694e-10, 7.7946e-10, 7.9395e-10, 7.8716e-10, 7.6933e-10, // f10430
1578 7.6220e-10, 7.4825e-10, 7.4805e-10, 7.6511e-10, 7.6492e-10, // f10450
1579 7.4103e-10, 7.1979e-10, 7.1686e-10, 7.3403e-10, 7.1142e-10, // f10460
1580 7.0212e-10, 7.1548e-10, 7.5253e-10, 8.0444e-10, 8.2378e-10, // f10470
1581 7.8004e-10, 7.1712e-10, 6.4978e-10, 5.7573e-10, 4.8675e-10, // f10480
1582 3.7945e-10, 3.0118e-10, 2.4241e-10, 1.9100e-10, 1.4816e-10, // f10490
1583 1.1567e-10, 9.4183e-11, 7.7660e-11, 6.5270e-11, 5.6616e-11, // f10500
1584 4.9576e-11, 4.4137e-11, 3.9459e-11, 3.5759e-11, 3.2478e-11, // f10510
1585 2.9419e-11, 2.6703e-11, 2.4365e-11, 2.2412e-11, 2.0606e-11, // f10520
1586 1.9067e-11, 1.7800e-11, 1.6695e-11, 1.5729e-11, 1.4887e-11, // f10530
1587 1.4135e-11, 1.3519e-11, 1.2992e-11, 1.2563e-11, 1.2223e-11, // f10540
1588 1.1962e-11, 1.1775e-11, 1.1657e-11, 1.1605e-11, 1.1619e-11, // f10560
1589 1.1697e-11, 1.1839e-11, 1.2046e-11, 1.2319e-11, 1.2659e-11, // f10570
1590 1.3070e-11, 1.3553e-11, 1.4113e-11, 1.4754e-11, 1.5480e-11, // f10580
1591 1.6298e-11, 1.7214e-11, 1.8236e-11, 1.9372e-11, 2.0635e-11, // f10590
1592 2.2036e-11, 2.3590e-11, 2.5317e-11, 2.7242e-11, 2.9400e-11, // f10600
1593 3.1849e-11, 3.4654e-11, 3.7923e-11, 4.1695e-11, 4.6055e-11, // f10610
1594 5.0940e-11, 5.5624e-11, 6.0667e-11, 6.6261e-11, 7.2692e-11, // f10620
1595 7.9711e-11, 8.7976e-11, 9.6884e-11, 1.0775e-10, 1.2093e-10, // f10630
1596 1.3531e-10, 1.5404e-10, 1.7315e-10, 1.9862e-10, 2.3341e-10, // f10640
1597 2.7014e-10, 3.1716e-10, 3.6957e-10, 4.3233e-10, 5.2566e-10, // f10650
1598 6.2251e-10, 7.2149e-10, 8.3958e-10, 9.5931e-10, 1.1388e-09, // f10670
1599 1.2973e-09, 1.4442e-09, 1.5638e-09, 1.6974e-09, 1.8489e-09, // f10680
1600 1.9830e-09, 2.1720e-09, 2.3662e-09, 2.6987e-09, 3.1697e-09, // f10690
1601 3.6907e-09, 4.2625e-09, 4.7946e-09, 5.3848e-09, 6.0897e-09, // f10700
1602 6.4730e-09, 7.1483e-09, 7.7432e-09, 8.0851e-09, 8.5013e-09, // f10710
1603 8.5909e-09, 9.1890e-09, 9.3124e-09, 9.5936e-09, 9.8787e-09, // f10720
1604 9.9036e-09, 9.6712e-09, 9.2036e-09, 9.0466e-09, 8.9380e-09, // f10730
1605 9.1815e-09, 9.5092e-09, 1.0027e-08, 1.0876e-08, 1.1744e-08, // f10740
1606 1.1853e-08, 1.1296e-08, 1.0134e-08, 8.8245e-09, 7.3930e-09, // f10750
1607 5.7150e-09, 4.4884e-09, 3.4027e-09, 2.6054e-09, 2.0790e-09, // f10760
1608 1.7267e-09, 1.4724e-09, 1.2722e-09, 1.1234e-09, 1.0186e-09, // f10780
1609 9.4680e-10, 8.8854e-10, 8.5127e-10, 8.3157e-10, 8.2226e-10, // f10790
1610 8.3395e-10, 8.3294e-10, 8.4725e-10, 8.8814e-10, 9.3697e-10, // f10800
1611 1.0112e-09, 1.0412e-09, 1.0948e-09, 1.1810e-09, 1.2267e-09, // f10810
1612 1.3690e-09, 1.4512e-09, 1.5568e-09, 1.6552e-09, 1.7321e-09, // f10820
1613 1.8797e-09, 1.9210e-09, 1.9686e-09, 1.9917e-09, 1.9357e-09, // f10830
1614 1.8486e-09, 1.7575e-09, 1.7113e-09, 1.7163e-09, 1.7623e-09, // f10840
1615 1.8536e-09, 1.9765e-09, 2.1334e-09, 2.3237e-09, 2.3259e-09, // f10850
1616 2.1833e-09, 1.9785e-09, 1.7308e-09, 1.4596e-09, 1.1198e-09, // f10860
1617 8.7375e-10, 6.5381e-10, 4.8677e-10, 3.6756e-10, 2.9155e-10, // f10870
1618 2.3735e-10, 1.9590e-10, 1.6638e-10, 1.4549e-10, 1.2947e-10, // f10890
1619 1.1511e-10, 1.0548e-10, 9.6511e-11, 9.0469e-11, 8.5170e-11, // f10900
1620 7.7804e-11, 7.1971e-11, 6.6213e-11, 6.1063e-11, 5.5881e-11, // f10910
1621 5.0508e-11, 4.5932e-11, 4.1997e-11, 3.7672e-11, 3.3972e-11, // f10920
1622 3.0318e-11, 2.6769e-11, 2.3874e-11, 2.1336e-11, 1.9073e-11, // f10930
1623 1.7313e-11, 1.5904e-11, 1.4684e-11, 1.3698e-11, 1.2873e-11, // f10940
1624 1.2175e-11, 1.1542e-11, 1.1024e-11, 1.0602e-11, 1.0267e-11, // f10950
1625 1.0012e-11, 9.8379e-12, 9.7482e-12, 9.7564e-12, 9.8613e-12, // f10960
1626 1.0092e-11, 1.0418e-11, 1.0868e-11, 1.1585e-11, 1.2351e-11, // f10970
1627 1.3372e-11, 1.4841e-11, 1.6457e-11, 1.8681e-11, 2.0550e-11, // f10980
1628 2.2912e-11, 2.5958e-11, 2.9137e-11, 3.2368e-11, 3.4848e-11, // f11000
1629 3.8462e-11, 4.2190e-11, 4.5629e-11, 4.9022e-11, 5.4232e-11, // f11010
1630 6.1900e-11, 7.1953e-11, 8.5368e-11, 9.9699e-11, 1.1734e-10, // f11020
1631 1.4185e-10, 1.7017e-10, 1.9813e-10, 2.3859e-10, 2.7304e-10, // f11030
1632 3.0971e-10, 3.5129e-10, 3.9405e-10, 4.5194e-10, 4.8932e-10, // f11040
1633 5.2436e-10, 5.4098e-10, 5.5542e-10, 5.7794e-10, 5.6992e-10, // f11050
1634 5.8790e-10, 6.1526e-10, 6.8034e-10, 6.7956e-10, 6.6864e-10, // f11060
1635 6.9329e-10, 7.2971e-10, 7.6546e-10, 7.5078e-10, 7.8406e-10, // f11070
1636 8.3896e-10, 9.0111e-10, 9.1994e-10, 8.7189e-10, 8.1426e-10, // f11080
1637 7.3097e-10, 6.3357e-10, 5.1371e-10, 4.0936e-10, 3.2918e-10, // f11090
1638 2.6255e-10, 2.0724e-10, 1.6879e-10, 1.4165e-10, 1.1989e-10, // f11110
1639 1.0125e-10, 8.9629e-11, 7.8458e-11, 6.8826e-11, 6.0935e-11, // f11120
1640 5.5208e-11, 5.2262e-11, 5.0260e-11, 4.8457e-11, 4.7888e-11, // f11130
1641 4.8032e-11, 5.0838e-11, 5.4668e-11, 5.5790e-11, 6.0056e-11, // f11140
1642 6.3811e-11, 6.8848e-11, 7.4590e-11, 7.8249e-11, 8.3371e-11, // f11150
1643 8.3641e-11, 8.6591e-11, 8.9599e-11, 9.3487e-11, 1.0066e-10, // f11160
1644 1.0765e-10, 1.0851e-10, 1.0619e-10, 1.0557e-10, 1.0460e-10, // f11170
1645 1.0796e-10, 1.0523e-10, 1.0674e-10, 1.1261e-10, 1.1431e-10, // f11180
1646 1.1408e-10, 1.0901e-10, 9.9105e-11, 8.8077e-11, 6.9928e-11, // f11190
1647 5.4595e-11, 4.5401e-11, 3.6313e-11, 2.6986e-11, 1.9463e-11, // f11200
1648 1.4577e-11, 1.1583e-11, 9.5492e-12, 8.0770e-12, 6.9642e-12, // f11220
1649 6.0966e-12, 5.4046e-12, 4.8431e-12, 4.3815e-12, 3.9987e-12, // f11230
1650 3.6790e-12, 3.4113e-12, 3.1868e-12, 2.9992e-12, 2.8434e-12, // f11240
1651 2.7153e-12, 2.6120e-12, 2.5311e-12, 2.4705e-12, 2.4290e-12, // f11250
1652 2.4053e-12, 2.3988e-12, 2.4087e-12, 2.4349e-12, 2.4771e-12, // f11260
1653 2.5355e-12, 2.6103e-12, 2.7019e-12, 2.8110e-12, 2.9383e-12, // f11270
1654 3.0848e-12, 3.2518e-12, 3.4405e-12, 3.6527e-12, 3.8902e-12, // f11280
1655 4.1555e-12, 4.4510e-12, 4.7801e-12, 5.1462e-12, 5.5539e-12, // f11290
1656 6.0086e-12, 6.5171e-12, 7.0884e-12, 7.7357e-12, 8.4831e-12, // f11300
1657 9.3096e-12, 1.0282e-11, 1.1407e-11, 1.2690e-11, 1.4148e-11, // f11310
1658 1.5888e-11, 1.7992e-11, 2.0523e-11, 2.3342e-11, 2.6578e-11, // f11330
1659 3.0909e-11, 3.6228e-11, 4.2053e-11, 4.9059e-11, 5.9273e-11, // f11340
1660 7.0166e-11, 8.2298e-11, 9.7071e-11, 1.1673e-10, 1.4010e-10, // f11350
1661 1.6621e-10, 2.0127e-10, 2.3586e-10, 2.7050e-10, 3.0950e-10, // f11360
1662 3.6584e-10, 4.1278e-10, 4.6591e-10, 5.2220e-10, 5.5246e-10, // f11370
1663 6.1500e-10, 6.5878e-10, 7.1167e-10, 7.9372e-10, 8.6975e-10, // f11380
1664 9.6459e-10, 9.7368e-10, 9.8142e-10, 1.0202e-09, 1.0200e-09, // f11390
1665 1.0356e-09, 1.0092e-09, 1.0269e-09, 1.0366e-09, 1.0490e-09, // f11400
1666 1.0717e-09, 1.0792e-09, 1.1016e-09, 1.0849e-09, 1.0929e-09, // f11410
1667 1.0971e-09, 1.0969e-09, 1.0460e-09, 9.2026e-10, 8.1113e-10, // f11420
1668 6.8635e-10, 5.5369e-10, 4.2908e-10, 3.3384e-10, 2.6480e-10, // f11440
1669 2.0810e-10, 1.6915e-10, 1.4051e-10, 1.1867e-10, 1.0158e-10, // f11450
1670 8.8990e-11, 7.9175e-11, 7.0440e-11, 6.3453e-11, 5.7009e-11, // f11460
1671 5.1662e-11, 4.7219e-11, 4.3454e-11, 4.0229e-11, 3.7689e-11, // f11470
1672 3.6567e-11, 3.5865e-11, 3.5955e-11, 3.5928e-11, 3.6298e-11, // f11480
1673 3.7629e-11, 3.9300e-11, 4.1829e-11, 4.4806e-11, 5.0534e-11, // f11490
1674 5.6672e-11, 6.2138e-11, 6.8678e-11, 7.6111e-11, 8.4591e-11, // f11500
1675 9.2634e-11, 9.8085e-11, 1.0830e-10, 1.1949e-10, 1.2511e-10, // f11510
1676 1.3394e-10, 1.3505e-10, 1.4342e-10, 1.4874e-10, 1.4920e-10, // f11520
1677 1.5872e-10, 1.5972e-10, 1.5821e-10, 1.5425e-10, 1.4937e-10, // f11530
1678 1.5089e-10, 1.5521e-10, 1.6325e-10, 1.6924e-10, 1.8265e-10, // f11550
1679 1.9612e-10, 2.0176e-10, 1.9359e-10, 1.7085e-10, 1.5197e-10, // f11560
1680 1.2646e-10, 9.8552e-11, 7.4530e-11, 5.5052e-11, 4.2315e-11, // f11570
1681 3.2736e-11, 2.6171e-11, 2.1909e-11, 1.8286e-11, 1.5752e-11, // f11580
1682 1.3859e-11, 1.2288e-11, 1.1002e-11, 9.7534e-12, 8.8412e-12, // f11590
1683 8.0169e-12, 7.2855e-12, 6.8734e-12, 6.4121e-12, 6.1471e-12, // f11600
1684 5.7780e-12, 5.3478e-12, 4.9652e-12, 4.4043e-12, 3.9862e-12, // f11610
1685 3.4684e-12, 2.9681e-12, 2.5791e-12, 2.2339e-12, 1.9247e-12, // f11620
1686 1.6849e-12, 1.4863e-12, 1.3291e-12, 1.2021e-12, 1.0947e-12, // f11630
1687 1.0015e-12, 9.1935e-13, 8.4612e-13, 7.8036e-13, 7.2100e-13, // f11640
1688 6.6718e-13, 6.1821e-13, 5.7353e-13, 5.3269e-13, 4.9526e-13, // f11660
1689 4.6093e-13, 4.2937e-13, 4.0034e-13, 3.7361e-13, 3.4895e-13, // f11670
1690 3.2621e-13, 3.0520e-13, 2.8578e-13, 2.6782e-13, 2.5120e-13, // f11680
1691 2.3581e-13, 2.2154e-13, 2.0832e-13, 1.9605e-13, 1.8466e-13, // f11690
1692 1.7408e-13, 1.6425e-13, 1.5511e-13, 1.4661e-13, 1.3869e-13, // f11700
1693 1.3131e-13, 1.2444e-13, 1.1803e-13, 1.1205e-13, 1.0646e-13, // f11710
1694 1.0124e-13, 9.6358e-14, 9.1789e-14, 8.7509e-14, 8.3498e-14, // f11720
1695 7.9735e-14, 7.6202e-14, 7.2882e-14, 6.9760e-14, 6.6822e-14, // f11730
1696 6.4053e-14, 6.1442e-14, 5.8978e-14, 5.6650e-14, 5.4448e-14, // f11740
1697 5.2364e-14, 5.0389e-14, 4.8516e-14, 4.6738e-14, 4.5048e-14, // f11750
1698 4.3441e-14, 4.1911e-14, 4.0453e-14, 3.9063e-14, 3.7735e-14, // f11770
1699 3.6467e-14, 3.5254e-14, 3.4093e-14, 3.2980e-14, 3.1914e-14, // f11780
1700 3.0891e-14, 2.9909e-14, 2.8965e-14, 2.8058e-14, 2.7185e-14, // f11790
1701 2.6344e-14, 2.5535e-14, 2.4755e-14, 2.4002e-14, 2.3276e-14, // f11800
1702 2.2576e-14, 2.1899e-14, 2.1245e-14, 2.0613e-14, 2.0002e-14, // f11810
1703 1.9411e-14, 1.8839e-14, 1.8285e-14, 1.7749e-14, 1.7230e-14, // f11820
1704 1.6727e-14, 1.6240e-14, 1.5768e-14, 1.5310e-14, 1.4867e-14, // f11830
1705 1.4436e-14, 1.4019e-14, 1.3614e-14, 1.3221e-14, 1.2840e-14, // f11840
1706 1.2471e-14, 1.2112e-14, 1.1764e-14, 1.1425e-14, 1.1097e-14, // f11850
1707 1.0779e-14, 1.0469e-14, 1.0169e-14, 9.8775e-15, 9.5943e-15, // f11860
1708 9.3193e-15, 9.0522e-15, 8.7928e-15, 8.5409e-15, 8.2962e-15, // f11880
1709 8.0586e-15, 7.8278e-15, 7.6036e-15, 7.3858e-15, 7.1742e-15, // f11890
1710 6.9687e-15, 6.7691e-15, 6.5752e-15, 6.3868e-15, 6.2038e-15, // f11900
1711 6.0260e-15, 5.8533e-15, 5.6856e-15, 5.5226e-15, 5.3642e-15, // f11910
1712 5.2104e-15, 5.0610e-15, 4.9158e-15, 4.7748e-15, 4.6378e-15, // f11920
1713 4.5047e-15, 4.3753e-15, 4.2497e-15, 4.1277e-15, 4.0091e-15, // f11930
1714 3.8939e-15, 3.7820e-15, 3.6733e-15, 3.5677e-15, 3.4651e-15, // f11940
1715 3.3655e-15, 3.2686e-15, 3.1746e-15, 3.0832e-15, 2.9944e-15, // f11950
1716 2.9082e-15, 2.8244e-15, 2.7431e-15, 2.6640e-15, 2.5872e-15, // f11960
1717 2.5126e-15, 2.4401e-15, 2.3697e-15, 2.3014e-15, 2.2349e-15, // f11970
1718 2.1704e-15, 2.1077e-15, 2.0468e-15, 1.9877e-15, 1.9302e-15, // f11990
1719 1.8744e-15, 1.8202e-15, 1.7675e-15, 1.7164e-15, 1.6667e-15, // f12000
1720 1.6184e-15, 1.5716e-15, 1.5260e-15, 1.4818e-15, 1.4389e-15, // f12010
1721 1.3971e-15, 1.3566e-15, 1.3172e-15, 1.2790e-15, 1.2419e-15, // f12020
1722 1.2058e-15, 1.1708e-15, 1.1368e-15, 1.1037e-15, 1.0716e-15, // f12030
1723 1.0405e-15, 1.0102e-15, 9.8079e-16, 9.5224e-16, 9.2451e-16, // f12040
1724 8.9758e-16, 8.7142e-16, 8.4602e-16, 8.2136e-16, 7.9740e-16, // f12050
1725 7.7414e-16, 7.5154e-16, 7.2961e-16, 7.0830e-16, 6.8761e-16, // f12060
1726 6.6752e-16, 6.4801e-16, 6.2906e-16, 6.1066e-16, 5.9280e-16, // f12070
1727 5.7545e-16, 5.5860e-16, 5.4224e-16, 5.2636e-16, 5.1094e-16, // f12080
1728 4.9596e-16};
1729
1730
1731
1732
1733
1734
1735
1736/*
1737 --------------------------- CKD_MT_1.00 -------------------------
1738
1739 11 February 2003
1740
1741 Release Notes for MT_CKD_1.00
1742
1743 Prepared by S. A. Clough,
1744 AER Inc.,
1745 131 Harwell Avenue
1746 Lexington, MA 02421
1747 clough@aer.com
1748
1749 This is the initial release of the MT_CKD water vapor continuum and
1750 represents the first recomputation of the entire self and foreign
1751 broadened continuum since the original model was developed in the
1752 1980s. This version of the continuum is implemented in the line-by-line
1753 model LBLRTM v7.01 and will be utilized in all related AER Radiative
1754 Transfer models.
1755
1756 further information can be found under
1757 http://www.rtweb.aer.com/continuum_frame.html
1758
1759 Transformation from original F77 code to C/C++ by
1760 T. Kuhn, iup Bremen, August 2003
1761
1762 --------------------------- CKD_MT_1.00 -------------------------
1763 */
1764
1765
1766// H2O self continuum parameters at T=296 K
1767// date of last update: 11/18/02
1768// units of (CM**3/MOL)*1.E-20
1769const Numeric SL296_ckd_mt_100_v1 = -20.0;
1770const Numeric SL296_ckd_mt_100_v2 = 20000.0;
1771const Numeric SL296_ckd_mt_100_dv = 10.0;
1772const int SL296_ckd_mt_100_npt = 2003;
1773const double SL296_ckd_mt_100[SL296_ckd_mt_100_npt+addF77fields] = {
1774 0.000e0, 1.720e-01, 1.695e-01,
1775 1.700e-01, 1.695e-01, 1.720e-01, 1.680e-01, 1.687e-01,
1776 1.624e-01, 1.606e-01, 1.508e-01, 1.447e-01, 1.344e-01,
1777 1.214e-01, 1.133e-01, 1.009e-01, 9.217e-02, 8.297e-02,
1778 6.989e-02, 6.513e-02, 5.469e-02, 5.056e-02, 4.417e-02,
1779 3.779e-02, 3.484e-02, 2.994e-02, 2.720e-02, 2.325e-02,
1780 2.063e-02, 1.818e-02, 1.592e-02, 1.405e-02, 1.251e-02,
1781 1.080e-02, 9.647e-03, 8.424e-03, 7.519e-03, 6.555e-03,
1782 5.880e-03, 5.136e-03, 4.511e-03, 3.989e-03, 3.509e-03,
1783 3.114e-03, 2.740e-03, 2.446e-03, 2.144e-03, 1.895e-03,
1784 1.676e-03, 1.486e-03, 1.312e-03, 1.164e-03, 1.031e-03,
1785 9.129e-04, 8.106e-04, 7.213e-04, 6.400e-04, 5.687e-04,
1786 5.063e-04, 4.511e-04, 4.029e-04, 3.596e-04, 3.220e-04,
1787 2.889e-04, 2.597e-04, 2.337e-04, 2.108e-04, 1.907e-04,
1788 1.728e-04, 1.570e-04, 1.430e-04, 1.305e-04, 1.195e-04,
1789 1.097e-04, 1.009e-04, 9.307e-05, 8.604e-05, 7.971e-05,
1790 7.407e-05, 6.896e-05, 6.433e-05, 6.013e-05, 5.631e-05,
1791 5.283e-05, 4.963e-05, 4.669e-05, 4.398e-05, 4.148e-05,
1792 3.917e-05, 3.702e-05, 3.502e-05, 3.316e-05, 3.142e-05,
1793 2.978e-05, 2.825e-05, 2.681e-05, 2.546e-05, 2.419e-05,
1794 2.299e-05, 2.186e-05, 2.079e-05, 1.979e-05, 1.884e-05,
1795 1.795e-05, 1.711e-05, 1.633e-05, 1.559e-05, 1.490e-05,
1796 1.426e-05, 1.367e-05, 1.312e-05, 1.263e-05, 1.218e-05,
1797 1.178e-05, 1.143e-05, 1.112e-05, 1.088e-05, 1.070e-05,
1798 1.057e-05, 1.050e-05, 1.051e-05, 1.059e-05, 1.076e-05,
1799 1.100e-05, 1.133e-05, 1.180e-05, 1.237e-05, 1.308e-05,
1800 1.393e-05, 1.483e-05, 1.614e-05, 1.758e-05, 1.930e-05,
1801 2.123e-05, 2.346e-05, 2.647e-05, 2.930e-05, 3.279e-05,
1802 3.745e-05, 4.152e-05, 4.813e-05, 5.477e-05, 6.203e-05,
1803 7.331e-05, 8.056e-05, 9.882e-05, 1.050e-04, 1.210e-04,
1804 1.341e-04, 1.572e-04, 1.698e-04, 1.968e-04, 2.175e-04,
1805 2.431e-04, 2.735e-04, 2.867e-04, 3.190e-04, 3.371e-04,
1806 3.554e-04, 3.726e-04, 3.837e-04, 3.878e-04, 3.864e-04,
1807 3.858e-04, 3.841e-04, 3.852e-04, 3.815e-04, 3.762e-04,
1808 3.618e-04, 3.579e-04, 3.450e-04, 3.202e-04, 3.018e-04,
1809 2.785e-04, 2.602e-04, 2.416e-04, 2.097e-04, 1.939e-04,
1810 1.689e-04, 1.498e-04, 1.308e-04, 1.170e-04, 1.011e-04,
1811 9.237e-05, 7.909e-05, 7.006e-05, 6.112e-05, 5.401e-05,
1812 4.914e-05, 4.266e-05, 3.963e-05, 3.316e-05, 3.037e-05,
1813 2.598e-05, 2.294e-05, 2.066e-05, 1.813e-05, 1.583e-05,
1814 1.423e-05, 1.247e-05, 1.116e-05, 9.760e-06, 8.596e-06,
1815 7.720e-06, 6.825e-06, 6.108e-06, 5.366e-06, 4.733e-06,
1816 4.229e-06, 3.731e-06, 3.346e-06, 2.972e-06, 2.628e-06,
1817 2.356e-06, 2.102e-06, 1.878e-06, 1.678e-06, 1.507e-06,
1818 1.348e-06, 1.210e-06, 1.089e-06, 9.806e-07, 8.857e-07,
1819 8.004e-07, 7.261e-07, 6.599e-07, 6.005e-07, 5.479e-07,
1820 5.011e-07, 4.595e-07, 4.219e-07, 3.885e-07, 3.583e-07,
1821 3.314e-07, 3.071e-07, 2.852e-07, 2.654e-07, 2.474e-07,
1822 2.311e-07, 2.162e-07, 2.026e-07, 1.902e-07, 1.788e-07,
1823 1.683e-07, 1.587e-07, 1.497e-07, 1.415e-07, 1.338e-07,
1824 1.266e-07, 1.200e-07, 1.138e-07, 1.080e-07, 1.027e-07,
1825 9.764e-08, 9.296e-08, 8.862e-08, 8.458e-08, 8.087e-08,
1826 7.744e-08, 7.429e-08, 7.145e-08, 6.893e-08, 6.664e-08,
1827 6.468e-08, 6.322e-08, 6.162e-08, 6.070e-08, 5.992e-08,
1828 5.913e-08, 5.841e-08, 5.796e-08, 5.757e-08, 5.746e-08,
1829 5.731e-08, 5.679e-08, 5.577e-08, 5.671e-08, 5.656e-08,
1830 5.594e-08, 5.593e-08, 5.602e-08, 5.620e-08, 5.693e-08,
1831 5.725e-08, 5.858e-08, 6.037e-08, 6.249e-08, 6.535e-08,
1832 6.899e-08, 7.356e-08, 7.918e-08, 8.618e-08, 9.385e-08,
1833 1.039e-07, 1.158e-07, 1.290e-07, 1.437e-07, 1.650e-07,
1834 1.871e-07, 2.121e-07, 2.427e-07, 2.773e-07, 3.247e-07,
1835 3.677e-07, 4.037e-07, 4.776e-07, 5.101e-07, 6.214e-07,
1836 6.936e-07, 7.581e-07, 8.486e-07, 9.355e-07, 9.942e-07,
1837 1.063e-06, 1.123e-06, 1.191e-06, 1.215e-06, 1.247e-06,
1838 1.260e-06, 1.271e-06, 1.284e-06, 1.317e-06, 1.323e-06,
1839 1.349e-06, 1.353e-06, 1.362e-06, 1.344e-06, 1.329e-06,
1840 1.336e-06, 1.327e-06, 1.325e-06, 1.359e-06, 1.374e-06,
1841 1.415e-06, 1.462e-06, 1.526e-06, 1.619e-06, 1.735e-06,
1842 1.863e-06, 2.034e-06, 2.265e-06, 2.482e-06, 2.756e-06,
1843 3.103e-06, 3.466e-06, 3.832e-06, 4.378e-06, 4.913e-06,
1844 5.651e-06, 6.311e-06, 7.169e-06, 8.057e-06, 9.253e-06,
1845 1.047e-05, 1.212e-05, 1.360e-05, 1.569e-05, 1.776e-05,
1846 2.020e-05, 2.281e-05, 2.683e-05, 2.994e-05, 3.488e-05,
1847 3.896e-05, 4.499e-05, 5.175e-05, 6.035e-05, 6.340e-05,
1848 7.281e-05, 7.923e-05, 8.348e-05, 9.631e-05, 1.044e-04,
1849 1.102e-04, 1.176e-04, 1.244e-04, 1.283e-04, 1.326e-04,
1850 1.400e-04, 1.395e-04, 1.387e-04, 1.363e-04, 1.314e-04,
1851 1.241e-04, 1.228e-04, 1.148e-04, 1.086e-04, 1.018e-04,
1852 8.890e-05, 8.316e-05, 7.292e-05, 6.452e-05, 5.625e-05,
1853 5.045e-05, 4.380e-05, 3.762e-05, 3.290e-05, 2.836e-05,
1854 2.485e-05, 2.168e-05, 1.895e-05, 1.659e-05, 1.453e-05,
1855 1.282e-05, 1.132e-05, 1.001e-05, 8.836e-06, 7.804e-06,
1856 6.922e-06, 6.116e-06, 5.429e-06, 4.824e-06, 4.278e-06,
1857 3.788e-06, 3.371e-06, 2.985e-06, 2.649e-06, 2.357e-06,
1858 2.090e-06, 1.858e-06, 1.647e-06, 1.462e-06, 1.299e-06,
1859 1.155e-06, 1.028e-06, 9.142e-07, 8.132e-07, 7.246e-07,
1860 6.451e-07, 5.764e-07, 5.151e-07, 4.603e-07, 4.121e-07,
1861 3.694e-07, 3.318e-07, 2.985e-07, 2.690e-07, 2.428e-07,
1862 2.197e-07, 1.992e-07, 1.810e-07, 1.649e-07, 1.506e-07,
1863 1.378e-07, 1.265e-07, 1.163e-07, 1.073e-07, 9.918e-08,
1864 9.191e-08, 8.538e-08, 7.949e-08, 7.419e-08, 6.940e-08,
1865 6.508e-08, 6.114e-08, 5.761e-08, 5.437e-08, 5.146e-08,
1866 4.890e-08, 4.636e-08, 4.406e-08, 4.201e-08, 4.015e-08,
1867 3.840e-08, 3.661e-08, 3.510e-08, 3.377e-08, 3.242e-08,
1868 3.130e-08, 3.015e-08, 2.918e-08, 2.830e-08, 2.758e-08,
1869 2.707e-08, 2.656e-08, 2.619e-08, 2.609e-08, 2.615e-08,
1870 2.630e-08, 2.675e-08, 2.745e-08, 2.842e-08, 2.966e-08,
1871 3.125e-08, 3.318e-08, 3.565e-08, 3.850e-08, 4.191e-08,
1872 4.590e-08, 5.059e-08, 5.607e-08, 6.239e-08, 6.958e-08,
1873 7.796e-08, 8.773e-08, 9.880e-08, 1.114e-07, 1.258e-07,
1874 1.422e-07, 1.610e-07, 1.822e-07, 2.060e-07, 2.337e-07,
1875 2.645e-07, 2.996e-07, 3.393e-07, 3.843e-07, 4.363e-07,
1876 4.935e-07, 5.607e-07, 6.363e-07, 7.242e-07, 8.230e-07,
1877 9.411e-07, 1.071e-06, 1.232e-06, 1.402e-06, 1.600e-06,
1878 1.820e-06, 2.128e-06, 2.386e-06, 2.781e-06, 3.242e-06,
1879 3.653e-06, 4.323e-06, 4.747e-06, 5.321e-06, 5.919e-06,
1880 6.681e-06, 7.101e-06, 7.983e-06, 8.342e-06, 8.741e-06,
1881 9.431e-06, 9.952e-06, 1.026e-05, 1.055e-05, 1.095e-05,
1882 1.095e-05, 1.087e-05, 1.056e-05, 1.026e-05, 9.715e-06,
1883 9.252e-06, 8.452e-06, 7.958e-06, 7.268e-06, 6.295e-06,
1884 6.003e-06, 5.000e-06, 4.591e-06, 3.983e-06, 3.479e-06,
1885 3.058e-06, 2.667e-06, 2.293e-06, 1.995e-06, 1.747e-06,
1886 1.517e-06, 1.335e-06, 1.165e-06, 1.028e-06, 9.007e-07,
1887 7.956e-07, 7.015e-07, 6.192e-07, 5.491e-07, 4.859e-07,
1888 4.297e-07, 3.799e-07, 3.380e-07, 3.002e-07, 2.659e-07,
1889 2.366e-07, 2.103e-07, 1.861e-07, 1.655e-07, 1.469e-07,
1890 1.309e-07, 1.162e-07, 1.032e-07, 9.198e-08, 8.181e-08,
1891 7.294e-08, 6.516e-08, 5.787e-08, 5.163e-08, 4.612e-08,
1892 4.119e-08, 3.695e-08, 3.308e-08, 2.976e-08, 2.670e-08,
1893 2.407e-08, 2.171e-08, 1.965e-08, 1.780e-08, 1.617e-08,
1894 1.470e-08, 1.341e-08, 1.227e-08, 1.125e-08, 1.033e-08,
1895 9.524e-09, 8.797e-09, 8.162e-09, 7.565e-09, 7.040e-09,
1896 6.560e-09, 6.129e-09, 5.733e-09, 5.376e-09, 5.043e-09,
1897 4.750e-09, 4.466e-09, 4.211e-09, 3.977e-09, 3.759e-09,
1898 3.558e-09, 3.373e-09, 3.201e-09, 3.043e-09, 2.895e-09,
1899 2.760e-09, 2.635e-09, 2.518e-09, 2.411e-09, 2.314e-09,
1900 2.230e-09, 2.151e-09, 2.087e-09, 2.035e-09, 1.988e-09,
1901 1.946e-09, 1.927e-09, 1.916e-09, 1.916e-09, 1.933e-09,
1902 1.966e-09, 2.018e-09, 2.090e-09, 2.182e-09, 2.299e-09,
1903 2.442e-09, 2.623e-09, 2.832e-09, 3.079e-09, 3.368e-09,
1904 3.714e-09, 4.104e-09, 4.567e-09, 5.091e-09, 5.701e-09,
1905 6.398e-09, 7.194e-09, 8.127e-09, 9.141e-09, 1.035e-08,
1906 1.177e-08, 1.338e-08, 1.508e-08, 1.711e-08, 1.955e-08,
1907 2.216e-08, 2.534e-08, 2.871e-08, 3.291e-08, 3.711e-08,
1908 4.285e-08, 4.868e-08, 5.509e-08, 6.276e-08, 7.262e-08,
1909 8.252e-08, 9.400e-08, 1.064e-07, 1.247e-07, 1.411e-07,
1910 1.626e-07, 1.827e-07, 2.044e-07, 2.284e-07, 2.452e-07,
1911 2.854e-07, 3.026e-07, 3.278e-07, 3.474e-07, 3.693e-07,
1912 3.930e-07, 4.104e-07, 4.220e-07, 4.439e-07, 4.545e-07,
1913 4.778e-07, 4.812e-07, 5.018e-07, 4.899e-07, 5.075e-07,
1914 5.073e-07, 5.171e-07, 5.131e-07, 5.250e-07, 5.617e-07,
1915 5.846e-07, 6.239e-07, 6.696e-07, 7.398e-07, 8.073e-07,
1916 9.150e-07, 1.009e-06, 1.116e-06, 1.264e-06, 1.439e-06,
1917 1.644e-06, 1.856e-06, 2.147e-06, 2.317e-06, 2.713e-06,
1918 2.882e-06, 2.990e-06, 3.489e-06, 3.581e-06, 4.033e-06,
1919 4.260e-06, 4.543e-06, 4.840e-06, 4.826e-06, 5.013e-06,
1920 5.252e-06, 5.277e-06, 5.306e-06, 5.236e-06, 5.123e-06,
1921 5.171e-06, 4.843e-06, 4.615e-06, 4.385e-06, 3.970e-06,
1922 3.693e-06, 3.231e-06, 2.915e-06, 2.495e-06, 2.144e-06,
1923 1.910e-06, 1.639e-06, 1.417e-06, 1.226e-06, 1.065e-06,
1924 9.290e-07, 8.142e-07, 7.161e-07, 6.318e-07, 5.581e-07,
1925 4.943e-07, 4.376e-07, 3.884e-07, 3.449e-07, 3.060e-07,
1926 2.712e-07, 2.412e-07, 2.139e-07, 1.903e-07, 1.689e-07,
1927 1.499e-07, 1.331e-07, 1.183e-07, 1.050e-07, 9.362e-08,
1928 8.306e-08, 7.403e-08, 6.578e-08, 5.853e-08, 5.216e-08,
1929 4.632e-08, 4.127e-08, 3.678e-08, 3.279e-08, 2.923e-08,
1930 2.612e-08, 2.339e-08, 2.094e-08, 1.877e-08, 1.686e-08,
1931 1.516e-08, 1.366e-08, 1.234e-08, 1.114e-08, 1.012e-08,
1932 9.182e-09, 8.362e-09, 7.634e-09, 6.981e-09, 6.406e-09,
1933 5.888e-09, 5.428e-09, 5.021e-09, 4.650e-09, 4.326e-09,
1934 4.033e-09, 3.770e-09, 3.536e-09, 3.327e-09, 3.141e-09,
1935 2.974e-09, 2.825e-09, 2.697e-09, 2.584e-09, 2.488e-09,
1936 2.406e-09, 2.340e-09, 2.292e-09, 2.259e-09, 2.244e-09,
1937 2.243e-09, 2.272e-09, 2.310e-09, 2.378e-09, 2.454e-09,
1938 2.618e-09, 2.672e-09, 2.831e-09, 3.050e-09, 3.225e-09,
1939 3.425e-09, 3.677e-09, 3.968e-09, 4.221e-09, 4.639e-09,
1940 4.960e-09, 5.359e-09, 5.649e-09, 6.230e-09, 6.716e-09,
1941 7.218e-09, 7.746e-09, 7.988e-09, 8.627e-09, 8.999e-09,
1942 9.442e-09, 9.820e-09, 1.015e-08, 1.060e-08, 1.079e-08,
1943 1.109e-08, 1.137e-08, 1.186e-08, 1.180e-08, 1.187e-08,
1944 1.194e-08, 1.192e-08, 1.224e-08, 1.245e-08, 1.246e-08,
1945 1.318e-08, 1.377e-08, 1.471e-08, 1.582e-08, 1.713e-08,
1946 1.853e-08, 2.063e-08, 2.270e-08, 2.567e-08, 2.891e-08,
1947 3.264e-08, 3.744e-08, 4.286e-08, 4.915e-08, 5.623e-08,
1948 6.336e-08, 7.293e-08, 8.309e-08, 9.319e-08, 1.091e-07,
1949 1.243e-07, 1.348e-07, 1.449e-07, 1.620e-07, 1.846e-07,
1950 1.937e-07, 2.040e-07, 2.179e-07, 2.298e-07, 2.433e-07,
1951 2.439e-07, 2.464e-07, 2.611e-07, 2.617e-07, 2.582e-07,
1952 2.453e-07, 2.401e-07, 2.349e-07, 2.203e-07, 2.066e-07,
1953 1.939e-07, 1.780e-07, 1.558e-07, 1.391e-07, 1.203e-07,
1954 1.048e-07, 9.464e-08, 8.306e-08, 7.239e-08, 6.317e-08,
1955 5.520e-08, 4.847e-08, 4.282e-08, 3.796e-08, 3.377e-08,
1956 2.996e-08, 2.678e-08, 2.400e-08, 2.134e-08, 1.904e-08,
1957 1.705e-08, 1.523e-08, 1.350e-08, 1.204e-08, 1.070e-08,
1958 9.408e-09, 8.476e-09, 7.470e-09, 6.679e-09, 5.929e-09,
1959 5.267e-09, 4.711e-09, 4.172e-09, 3.761e-09, 3.288e-09,
1960 2.929e-09, 2.609e-09, 2.315e-09, 2.042e-09, 1.844e-09,
1961 1.640e-09, 1.470e-09, 1.310e-09, 1.176e-09, 1.049e-09,
1962 9.377e-10, 8.462e-10, 7.616e-10, 6.854e-10, 6.191e-10,
1963 5.596e-10, 5.078e-10, 4.611e-10, 4.197e-10, 3.830e-10,
1964 3.505e-10, 3.215e-10, 2.956e-10, 2.726e-10, 2.521e-10,
1965 2.338e-10, 2.173e-10, 2.026e-10, 1.895e-10, 1.777e-10,
1966 1.672e-10, 1.579e-10, 1.496e-10, 1.423e-10, 1.358e-10,
1967 1.302e-10, 1.254e-10, 1.216e-10, 1.187e-10, 1.163e-10,
1968 1.147e-10, 1.145e-10, 1.150e-10, 1.170e-10, 1.192e-10,
1969 1.250e-10, 1.298e-10, 1.345e-10, 1.405e-10, 1.538e-10,
1970 1.648e-10, 1.721e-10, 1.872e-10, 1.968e-10, 2.089e-10,
1971 2.172e-10, 2.317e-10, 2.389e-10, 2.503e-10, 2.585e-10,
1972 2.686e-10, 2.800e-10, 2.895e-10, 3.019e-10, 3.037e-10,
1973 3.076e-10, 3.146e-10, 3.198e-10, 3.332e-10, 3.397e-10,
1974 3.540e-10, 3.667e-10, 3.895e-10, 4.071e-10, 4.565e-10,
1975 4.983e-10, 5.439e-10, 5.968e-10, 6.676e-10, 7.456e-10,
1976 8.405e-10, 9.478e-10, 1.064e-09, 1.218e-09, 1.386e-09,
1977 1.581e-09, 1.787e-09, 2.032e-09, 2.347e-09, 2.677e-09,
1978 3.008e-09, 3.544e-09, 4.056e-09, 4.687e-09, 5.331e-09,
1979 6.227e-09, 6.854e-09, 8.139e-09, 8.945e-09, 9.865e-09,
1980 1.125e-08, 1.178e-08, 1.364e-08, 1.436e-08, 1.540e-08,
1981 1.672e-08, 1.793e-08, 1.906e-08, 2.036e-08, 2.144e-08,
1982 2.292e-08, 2.371e-08, 2.493e-08, 2.606e-08, 2.706e-08,
1983 2.866e-08, 3.036e-08, 3.136e-08, 3.405e-08, 3.665e-08,
1984 3.837e-08, 4.229e-08, 4.748e-08, 5.320e-08, 5.763e-08,
1985 6.677e-08, 7.216e-08, 7.716e-08, 8.958e-08, 9.419e-08,
1986 1.036e-07, 1.108e-07, 1.189e-07, 1.246e-07, 1.348e-07,
1987 1.310e-07, 1.361e-07, 1.364e-07, 1.363e-07, 1.343e-07,
1988 1.293e-07, 1.254e-07, 1.235e-07, 1.158e-07, 1.107e-07,
1989 9.961e-08, 9.011e-08, 7.910e-08, 6.916e-08, 6.338e-08,
1990 5.564e-08, 4.827e-08, 4.198e-08, 3.695e-08, 3.276e-08,
1991 2.929e-08, 2.633e-08, 2.391e-08, 2.192e-08, 2.021e-08,
1992 1.890e-08, 1.772e-08, 1.667e-08, 1.603e-08, 1.547e-08,
1993 1.537e-08, 1.492e-08, 1.515e-08, 1.479e-08, 1.450e-08,
1994 1.513e-08, 1.495e-08, 1.529e-08, 1.565e-08, 1.564e-08,
1995 1.553e-08, 1.569e-08, 1.584e-08, 1.570e-08, 1.538e-08,
1996 1.513e-08, 1.472e-08, 1.425e-08, 1.349e-08, 1.328e-08,
1997 1.249e-08, 1.170e-08, 1.077e-08, 9.514e-09, 8.614e-09,
1998 7.460e-09, 6.621e-09, 5.775e-09, 5.006e-09, 4.308e-09,
1999 3.747e-09, 3.240e-09, 2.840e-09, 2.481e-09, 2.184e-09,
2000 1.923e-09, 1.710e-09, 1.504e-09, 1.334e-09, 1.187e-09,
2001 1.053e-09, 9.367e-10, 8.306e-10, 7.419e-10, 6.630e-10,
2002 5.918e-10, 5.277e-10, 4.717e-10, 4.222e-10, 3.783e-10,
2003 3.390e-10, 3.036e-10, 2.729e-10, 2.455e-10, 2.211e-10,
2004 1.995e-10, 1.804e-10, 1.635e-10, 1.485e-10, 1.355e-10,
2005 1.240e-10, 1.139e-10, 1.051e-10, 9.757e-11, 9.114e-11,
2006 8.577e-11, 8.139e-11, 7.792e-11, 7.520e-11, 7.390e-11,
2007 7.311e-11, 7.277e-11, 7.482e-11, 7.698e-11, 8.162e-11,
2008 8.517e-11, 8.968e-11, 9.905e-11, 1.075e-10, 1.187e-10,
2009 1.291e-10, 1.426e-10, 1.573e-10, 1.734e-10, 1.905e-10,
2010 2.097e-10, 2.280e-10, 2.473e-10, 2.718e-10, 2.922e-10,
2011 3.128e-10, 3.361e-10, 3.641e-10, 3.910e-10, 4.196e-10,
2012 4.501e-10, 4.932e-10, 5.258e-10, 5.755e-10, 6.253e-10,
2013 6.664e-10, 7.344e-10, 7.985e-10, 8.877e-10, 1.005e-09,
2014 1.118e-09, 1.251e-09, 1.428e-09, 1.610e-09, 1.888e-09,
2015 2.077e-09, 2.331e-09, 2.751e-09, 3.061e-09, 3.522e-09,
2016 3.805e-09, 4.181e-09, 4.575e-09, 5.167e-09, 5.634e-09,
2017 6.007e-09, 6.501e-09, 6.829e-09, 7.211e-09, 7.262e-09,
2018 7.696e-09, 7.832e-09, 7.799e-09, 7.651e-09, 7.304e-09,
2019 7.150e-09, 6.977e-09, 6.603e-09, 6.209e-09, 5.690e-09,
2020 5.432e-09, 4.764e-09, 4.189e-09, 3.640e-09, 3.203e-09,
2021 2.848e-09, 2.510e-09, 2.194e-09, 1.946e-09, 1.750e-09,
2022 1.567e-09, 1.426e-09, 1.302e-09, 1.197e-09, 1.109e-09,
2023 1.035e-09, 9.719e-10, 9.207e-10, 8.957e-10, 8.578e-10,
2024 8.262e-10, 8.117e-10, 7.987e-10, 7.875e-10, 7.741e-10,
2025 7.762e-10, 7.537e-10, 7.424e-10, 7.474e-10, 7.294e-10,
2026 7.216e-10, 7.233e-10, 7.075e-10, 6.892e-10, 6.618e-10,
2027 6.314e-10, 6.208e-10, 5.689e-10, 5.550e-10, 4.984e-10,
2028 4.600e-10, 4.078e-10, 3.879e-10, 3.459e-10, 2.982e-10,
2029 2.626e-10, 2.329e-10, 1.988e-10, 1.735e-10, 1.487e-10,
2030 1.297e-10, 1.133e-10, 9.943e-11, 8.736e-11, 7.726e-11,
2031 6.836e-11, 6.053e-11, 5.384e-11, 4.789e-11, 4.267e-11,
2032 3.804e-11, 3.398e-11, 3.034e-11, 2.710e-11, 2.425e-11,
2033 2.173e-11, 1.950e-11, 1.752e-11, 1.574e-11, 1.418e-11,
2034 1.278e-11, 1.154e-11, 1.044e-11, 9.463e-12, 8.602e-12,
2035 7.841e-12, 7.171e-12, 6.584e-12, 6.073e-12, 5.631e-12,
2036 5.254e-12, 4.937e-12, 4.679e-12, 4.476e-12, 4.328e-12,
2037 4.233e-12, 4.194e-12, 4.211e-12, 4.286e-12, 4.424e-12,
2038 4.628e-12, 4.906e-12, 5.262e-12, 5.708e-12, 6.254e-12,
2039 6.914e-12, 7.714e-12, 8.677e-12, 9.747e-12, 1.101e-11,
2040 1.256e-11, 1.409e-11, 1.597e-11, 1.807e-11, 2.034e-11,
2041 2.316e-11, 2.622e-11, 2.962e-11, 3.369e-11, 3.819e-11,
2042 4.329e-11, 4.932e-11, 5.589e-11, 6.364e-11, 7.284e-11,
2043 8.236e-11, 9.447e-11, 1.078e-10, 1.229e-10, 1.417e-10,
2044 1.614e-10, 1.843e-10, 2.107e-10, 2.406e-10, 2.728e-10,
2045 3.195e-10, 3.595e-10, 4.153e-10, 4.736e-10, 5.410e-10,
2046 6.088e-10, 6.769e-10, 7.691e-10, 8.545e-10, 9.621e-10,
2047 1.047e-09, 1.161e-09, 1.296e-09, 1.424e-09, 1.576e-09,
2048 1.739e-09, 1.893e-09, 2.080e-09, 2.336e-09, 2.604e-09,
2049 2.760e-09, 3.001e-09, 3.365e-09, 3.550e-09, 3.895e-09,
2050 4.183e-09, 4.614e-09, 4.846e-09, 5.068e-09, 5.427e-09,
2051 5.541e-09, 5.864e-09, 5.997e-09, 5.997e-09, 6.061e-09,
2052 5.944e-09, 5.855e-09, 5.661e-09, 5.523e-09, 5.374e-09,
2053 4.940e-09, 4.688e-09, 4.170e-09, 3.913e-09, 3.423e-09,
2054 2.997e-09, 2.598e-09, 2.253e-09, 1.946e-09, 1.710e-09,
2055 1.507e-09, 1.336e-09, 1.190e-09, 1.068e-09, 9.623e-10,
2056 8.772e-10, 8.007e-10, 7.420e-10, 6.884e-10, 6.483e-10,
2057 6.162e-10, 5.922e-10, 5.688e-10, 5.654e-10, 5.637e-10,
2058 5.701e-10, 5.781e-10, 5.874e-10, 6.268e-10, 6.357e-10,
2059 6.525e-10, 7.137e-10, 7.441e-10, 8.024e-10, 8.485e-10,
2060 9.143e-10, 9.536e-10, 9.717e-10, 1.018e-09, 1.042e-09,
2061 1.054e-09, 1.092e-09, 1.079e-09, 1.064e-09, 1.043e-09,
2062 1.020e-09, 9.687e-10, 9.273e-10, 9.208e-10, 9.068e-10,
2063 7.687e-10, 7.385e-10, 6.595e-10, 5.870e-10, 5.144e-10,
2064 4.417e-10, 3.804e-10, 3.301e-10, 2.866e-10, 2.509e-10,
2065 2.202e-10, 1.947e-10, 1.719e-10, 1.525e-10, 1.361e-10,
2066 1.210e-10, 1.084e-10, 9.800e-11, 8.801e-11, 7.954e-11,
2067 7.124e-11, 6.335e-11, 5.760e-11, 5.132e-11, 4.601e-11,
2068 4.096e-11, 3.657e-11, 3.250e-11, 2.909e-11, 2.587e-11,
2069 2.297e-11, 2.050e-11, 1.828e-11, 1.632e-11, 1.462e-11,
2070 1.314e-11, 1.185e-11, 1.073e-11, 9.760e-12, 8.922e-12,
2071 8.206e-12, 7.602e-12, 7.100e-12, 6.694e-12, 6.378e-12,
2072 6.149e-12, 6.004e-12, 5.941e-12, 5.962e-12, 6.069e-12,
2073 6.265e-12, 6.551e-12, 6.935e-12, 7.457e-12, 8.074e-12,
2074 8.811e-12, 9.852e-12, 1.086e-11, 1.207e-11, 1.361e-11,
2075 1.553e-11, 1.737e-11, 1.930e-11, 2.175e-11, 2.410e-11,
2076 2.706e-11, 3.023e-11, 3.313e-11, 3.657e-11, 4.118e-11,
2077 4.569e-11, 5.025e-11, 5.660e-11, 6.231e-11, 6.881e-11,
2078 7.996e-11, 8.526e-11, 9.694e-11, 1.106e-10, 1.222e-10,
2079 1.355e-10, 1.525e-10, 1.775e-10, 1.924e-10, 2.181e-10,
2080 2.379e-10, 2.662e-10, 2.907e-10, 3.154e-10, 3.366e-10,
2081 3.579e-10, 3.858e-10, 4.046e-10, 4.196e-10, 4.166e-10,
2082 4.457e-10, 4.466e-10, 4.404e-10, 4.337e-10, 4.150e-10,
2083 4.083e-10, 3.910e-10, 3.723e-10, 3.514e-10, 3.303e-10,
2084 2.847e-10, 2.546e-10, 2.230e-10, 1.994e-10, 1.733e-10,
2085 1.488e-10, 1.297e-10, 1.144e-10, 1.004e-10, 8.741e-11,
2086 7.928e-11, 7.034e-11, 6.323e-11, 5.754e-11, 5.250e-11,
2087 4.850e-11, 4.502e-11, 4.286e-11, 4.028e-11, 3.899e-11,
2088 3.824e-11, 3.761e-11, 3.804e-11, 3.839e-11, 3.845e-11,
2089 4.244e-11, 4.382e-11, 4.582e-11, 4.847e-11, 5.209e-11,
2090 5.384e-11, 5.887e-11, 6.371e-11, 6.737e-11, 7.168e-11,
2091 7.415e-11, 7.827e-11, 8.037e-11, 8.120e-11, 8.071e-11,
2092 8.008e-11, 7.851e-11, 7.544e-11, 7.377e-11, 7.173e-11,
2093 6.801e-11, 6.267e-11, 5.727e-11, 5.288e-11, 4.853e-11,
2094 4.082e-11, 3.645e-11, 3.136e-11, 2.672e-11, 2.304e-11,
2095 1.986e-11, 1.725e-11, 1.503e-11, 1.315e-11, 1.153e-11,
2096 1.014e-11, 8.942e-12, 7.901e-12, 6.993e-12, 6.199e-12,
2097 5.502e-12, 4.890e-12, 4.351e-12, 3.878e-12, 3.461e-12,
2098 3.094e-12, 2.771e-12, 2.488e-12, 2.241e-12, 2.025e-12,
2099 1.838e-12, 1.677e-12, 1.541e-12, 1.427e-12, 1.335e-12,
2100 1.262e-12, 1.209e-12, 1.176e-12, 1.161e-12, 1.165e-12,
2101 1.189e-12, 1.234e-12, 1.300e-12, 1.389e-12, 1.503e-12,
2102 1.644e-12, 1.814e-12, 2.017e-12, 2.255e-12, 2.534e-12,
2103 2.858e-12, 3.231e-12, 3.661e-12, 4.153e-12, 4.717e-12,
2104 5.360e-12, 6.094e-12, 6.930e-12, 7.882e-12, 8.966e-12,
2105 1.020e-11, 1.162e-11, 1.324e-11, 1.510e-11, 1.720e-11,
2106 1.965e-11, 2.237e-11, 2.560e-11, 2.927e-11, 3.371e-11,
2107 3.842e-11, 4.429e-11, 5.139e-11, 5.798e-11, 6.697e-11,
2108 7.626e-11, 8.647e-11, 1.022e-10, 1.136e-10, 1.300e-10,
2109 1.481e-10, 1.672e-10, 1.871e-10, 2.126e-10, 2.357e-10,
2110 2.583e-10, 2.997e-10, 3.289e-10, 3.702e-10, 4.012e-10,
2111 4.319e-10, 4.527e-10, 5.001e-10, 5.448e-10, 5.611e-10,
2112 5.760e-10, 5.965e-10, 6.079e-10, 6.207e-10, 6.276e-10,
2113 6.222e-10, 6.137e-10, 6.000e-10, 5.814e-10, 5.393e-10,
2114 5.350e-10, 4.947e-10, 4.629e-10, 4.117e-10, 3.712e-10,
2115 3.372e-10, 2.923e-10, 2.550e-10, 2.232e-10, 1.929e-10,
2116 1.679e-10, 1.460e-10, 1.289e-10, 1.130e-10, 9.953e-11,
2117 8.763e-11, 7.760e-11, 6.900e-11, 6.160e-11, 5.525e-11,
2118 4.958e-11, 4.489e-11, 4.072e-11, 3.728e-11, 3.438e-11,
2119 3.205e-11, 3.006e-11, 2.848e-11, 2.766e-11, 2.688e-11,
2120 2.664e-11, 2.670e-11, 2.696e-11, 2.786e-11, 2.861e-11,
2121 3.009e-11, 3.178e-11, 3.389e-11, 3.587e-11, 3.819e-11,
2122 4.054e-11, 4.417e-11, 4.703e-11, 5.137e-11, 5.460e-11,
2123 6.055e-11, 6.333e-11, 6.773e-11, 7.219e-11, 7.717e-11,
2124 8.131e-11, 8.491e-11, 8.574e-11, 9.010e-11, 9.017e-11,
2125 8.999e-11, 8.959e-11, 8.838e-11, 8.579e-11, 8.162e-11,
2126 8.098e-11, 7.472e-11, 7.108e-11, 6.559e-11, 5.994e-11,
2127 5.172e-11, 4.424e-11, 3.951e-11, 3.340e-11, 2.902e-11,
2128 2.541e-11, 2.215e-11, 1.945e-11, 1.716e-11, 1.503e-11,
2129 1.339e-11, 1.185e-11, 1.050e-11, 9.336e-12, 8.307e-12,
2130 7.312e-12, 6.550e-12, 5.836e-12, 5.178e-12, 4.600e-12,
2131 4.086e-12, 3.639e-12, 3.247e-12, 2.904e-12, 2.604e-12,
2132 2.341e-12, 2.112e-12, 1.914e-12, 1.744e-12, 1.598e-12,
2133 1.476e-12, 1.374e-12, 1.293e-12, 1.230e-12, 1.185e-12,
2134 1.158e-12, 1.147e-12, 1.154e-12, 1.177e-12, 1.219e-12,
2135 1.280e-12, 1.360e-12, 1.463e-12, 1.591e-12, 1.750e-12,
2136 1.940e-12, 2.156e-12, 2.430e-12, 2.748e-12, 3.052e-12,
2137 3.533e-12, 3.967e-12, 4.471e-12, 5.041e-12, 5.860e-12,
2138 6.664e-12, 7.522e-12, 8.342e-12, 9.412e-12, 1.072e-11,
2139 1.213e-11, 1.343e-11, 1.496e-11, 1.664e-11, 1.822e-11,
2140 2.029e-11, 2.233e-11, 2.457e-11, 2.709e-11, 2.928e-11,
2141 3.115e-11, 3.356e-11, 3.592e-11, 3.818e-11, 3.936e-11,
2142 4.061e-11, 4.149e-11, 4.299e-11, 4.223e-11, 4.251e-11,
2143 4.287e-11, 4.177e-11, 4.094e-11, 3.942e-11, 3.772e-11,
2144 3.614e-11, 3.394e-11, 3.222e-11, 2.791e-11, 2.665e-11,
2145 2.309e-11, 2.032e-11, 1.740e-11, 1.535e-11, 1.323e-11,
2146 1.151e-11, 9.803e-12, 8.650e-12, 7.540e-12, 6.619e-12,
2147 5.832e-12, 5.113e-12, 4.503e-12, 3.975e-12, 3.520e-12,
2148 3.112e-12, 2.797e-12, 2.500e-12, 2.240e-12, 2.013e-12,
2149 1.819e-12, 1.653e-12, 1.513e-12, 1.395e-12, 1.299e-12,
2150 1.225e-12, 1.168e-12, 1.124e-12, 1.148e-12, 1.107e-12,
2151 1.128e-12, 1.169e-12, 1.233e-12, 1.307e-12, 1.359e-12,
2152 1.543e-12, 1.686e-12, 1.794e-12, 2.028e-12, 2.210e-12,
2153 2.441e-12, 2.653e-12, 2.828e-12, 3.093e-12, 3.280e-12,
2154 3.551e-12, 3.677e-12, 3.803e-12, 3.844e-12, 4.068e-12,
2155 4.093e-12, 4.002e-12, 3.904e-12, 3.624e-12, 3.633e-12,
2156 3.622e-12, 3.443e-12, 3.184e-12, 2.934e-12, 2.476e-12,
2157 2.212e-12, 1.867e-12, 1.594e-12, 1.370e-12, 1.192e-12,
2158 1.045e-12, 9.211e-13, 8.170e-13, 7.290e-13, 6.550e-13,
2159 5.929e-13, 5.415e-13, 4.995e-13, 4.661e-13, 4.406e-13,
2160 4.225e-13, 4.116e-13, 4.075e-13, 4.102e-13, 4.198e-13,
2161 4.365e-13, 4.606e-13, 4.925e-13, 5.326e-13, 5.818e-13,
2162 6.407e-13, 7.104e-13, 7.920e-13, 8.868e-13, 9.964e-13,
2163 1.123e-12, 1.268e-12, 1.434e-12, 1.626e-12, 1.848e-12,
2164 2.107e-12, 2.422e-12, 2.772e-12, 3.145e-12, 3.704e-12,
2165 4.270e-12, 4.721e-12, 5.361e-12, 6.083e-12, 7.095e-12,
2166 7.968e-12, 9.228e-12, 1.048e-11, 1.187e-11, 1.336e-11,
2167 1.577e-11, 1.772e-11, 2.017e-11, 2.250e-11, 2.630e-11,
2168 2.911e-11, 3.356e-11, 3.820e-11, 4.173e-11, 4.811e-11,
2169 5.254e-11, 5.839e-11, 6.187e-11, 6.805e-11, 7.118e-11,
2170 7.369e-11, 7.664e-11, 7.794e-11, 7.947e-11, 8.036e-11,
2171 7.954e-11, 7.849e-11, 7.518e-11, 7.462e-11, 6.926e-11,
2172 6.531e-11, 6.197e-11, 5.421e-11, 4.777e-11, 4.111e-11,
2173 3.679e-11, 3.166e-11, 2.786e-11, 2.436e-11, 2.144e-11,
2174 1.859e-11, 1.628e-11, 1.414e-11, 1.237e-11, 1.093e-11,
2175 9.558e-12 };
2176
2177// H2O self continuum parameters at T=260 K
2178// date of last update: 11/18/02
2179// units of (CM**3/MOL)*1.E-20
2180const Numeric SL260_ckd_mt_100_v1 = -20.0;
2181const Numeric SL260_ckd_mt_100_v2 = 20000.0;
2182const Numeric SL260_ckd_mt_100_dv = 10.0;
2183const int SL260_ckd_mt_100_npt = 2003;
2184const double SL260_ckd_mt_100[SL260_ckd_mt_100_npt+addF77fields] = {
2185 0.000e0, 2.749e-01, 2.732e-01,
2186 2.752e-01, 2.732e-01, 2.749e-01, 2.676e-01, 2.667e-01,
2187 2.545e-01, 2.497e-01, 2.327e-01, 2.218e-01, 2.036e-01,
2188 1.825e-01, 1.694e-01, 1.497e-01, 1.353e-01, 1.210e-01,
2189 1.014e-01, 9.405e-02, 7.848e-02, 7.195e-02, 6.246e-02,
2190 5.306e-02, 4.853e-02, 4.138e-02, 3.735e-02, 3.171e-02,
2191 2.785e-02, 2.431e-02, 2.111e-02, 1.845e-02, 1.640e-02,
2192 1.405e-02, 1.255e-02, 1.098e-02, 9.797e-03, 8.646e-03,
2193 7.779e-03, 6.898e-03, 6.099e-03, 5.453e-03, 4.909e-03,
2194 4.413e-03, 3.959e-03, 3.581e-03, 3.199e-03, 2.871e-03,
2195 2.583e-03, 2.330e-03, 2.086e-03, 1.874e-03, 1.684e-03,
2196 1.512e-03, 1.361e-03, 1.225e-03, 1.100e-03, 9.890e-04,
2197 8.916e-04, 8.039e-04, 7.256e-04, 6.545e-04, 5.918e-04,
2198 5.359e-04, 4.867e-04, 4.426e-04, 4.033e-04, 3.682e-04,
2199 3.366e-04, 3.085e-04, 2.833e-04, 2.605e-04, 2.403e-04,
2200 2.221e-04, 2.055e-04, 1.908e-04, 1.774e-04, 1.653e-04,
2201 1.544e-04, 1.443e-04, 1.351e-04, 1.267e-04, 1.190e-04,
2202 1.119e-04, 1.053e-04, 9.922e-05, 9.355e-05, 8.831e-05,
2203 8.339e-05, 7.878e-05, 7.449e-05, 7.043e-05, 6.664e-05,
2204 6.307e-05, 5.969e-05, 5.654e-05, 5.357e-05, 5.075e-05,
2205 4.810e-05, 4.560e-05, 4.322e-05, 4.102e-05, 3.892e-05,
2206 3.696e-05, 3.511e-05, 3.339e-05, 3.177e-05, 3.026e-05,
2207 2.886e-05, 2.756e-05, 2.636e-05, 2.527e-05, 2.427e-05,
2208 2.337e-05, 2.257e-05, 2.185e-05, 2.127e-05, 2.080e-05,
2209 2.041e-05, 2.013e-05, 2.000e-05, 1.997e-05, 2.009e-05,
2210 2.031e-05, 2.068e-05, 2.124e-05, 2.189e-05, 2.267e-05,
2211 2.364e-05, 2.463e-05, 2.618e-05, 2.774e-05, 2.937e-05,
2212 3.144e-05, 3.359e-05, 3.695e-05, 4.002e-05, 4.374e-05,
2213 4.947e-05, 5.431e-05, 6.281e-05, 7.169e-05, 8.157e-05,
2214 9.728e-05, 1.079e-04, 1.337e-04, 1.442e-04, 1.683e-04,
2215 1.879e-04, 2.223e-04, 2.425e-04, 2.838e-04, 3.143e-04,
2216 3.527e-04, 4.012e-04, 4.237e-04, 4.747e-04, 5.057e-04,
2217 5.409e-04, 5.734e-04, 5.944e-04, 6.077e-04, 6.175e-04,
2218 6.238e-04, 6.226e-04, 6.248e-04, 6.192e-04, 6.098e-04,
2219 5.818e-04, 5.709e-04, 5.465e-04, 5.043e-04, 4.699e-04,
2220 4.294e-04, 3.984e-04, 3.672e-04, 3.152e-04, 2.883e-04,
2221 2.503e-04, 2.211e-04, 1.920e-04, 1.714e-04, 1.485e-04,
2222 1.358e-04, 1.156e-04, 1.021e-04, 8.887e-05, 7.842e-05,
2223 7.120e-05, 6.186e-05, 5.730e-05, 4.792e-05, 4.364e-05,
2224 3.720e-05, 3.280e-05, 2.946e-05, 2.591e-05, 2.261e-05,
2225 2.048e-05, 1.813e-05, 1.630e-05, 1.447e-05, 1.282e-05,
2226 1.167e-05, 1.041e-05, 9.449e-06, 8.510e-06, 7.596e-06,
2227 6.961e-06, 6.272e-06, 5.728e-06, 5.198e-06, 4.667e-06,
2228 4.288e-06, 3.897e-06, 3.551e-06, 3.235e-06, 2.952e-06,
2229 2.688e-06, 2.449e-06, 2.241e-06, 2.050e-06, 1.879e-06,
2230 1.722e-06, 1.582e-06, 1.456e-06, 1.339e-06, 1.236e-06,
2231 1.144e-06, 1.060e-06, 9.830e-07, 9.149e-07, 8.535e-07,
2232 7.973e-07, 7.466e-07, 6.999e-07, 6.574e-07, 6.180e-07,
2233 5.821e-07, 5.487e-07, 5.180e-07, 4.896e-07, 4.631e-07,
2234 4.386e-07, 4.160e-07, 3.945e-07, 3.748e-07, 3.562e-07,
2235 3.385e-07, 3.222e-07, 3.068e-07, 2.922e-07, 2.788e-07,
2236 2.659e-07, 2.539e-07, 2.425e-07, 2.318e-07, 2.219e-07,
2237 2.127e-07, 2.039e-07, 1.958e-07, 1.885e-07, 1.818e-07,
2238 1.758e-07, 1.711e-07, 1.662e-07, 1.630e-07, 1.605e-07,
2239 1.580e-07, 1.559e-07, 1.545e-07, 1.532e-07, 1.522e-07,
2240 1.510e-07, 1.495e-07, 1.465e-07, 1.483e-07, 1.469e-07,
2241 1.448e-07, 1.444e-07, 1.436e-07, 1.426e-07, 1.431e-07,
2242 1.425e-07, 1.445e-07, 1.477e-07, 1.515e-07, 1.567e-07,
2243 1.634e-07, 1.712e-07, 1.802e-07, 1.914e-07, 2.024e-07,
2244 2.159e-07, 2.295e-07, 2.461e-07, 2.621e-07, 2.868e-07,
2245 3.102e-07, 3.394e-07, 3.784e-07, 4.223e-07, 4.864e-07,
2246 5.501e-07, 6.039e-07, 7.193e-07, 7.728e-07, 9.514e-07,
2247 1.073e-06, 1.180e-06, 1.333e-06, 1.472e-06, 1.566e-06,
2248 1.677e-06, 1.784e-06, 1.904e-06, 1.953e-06, 2.020e-06,
2249 2.074e-06, 2.128e-06, 2.162e-06, 2.219e-06, 2.221e-06,
2250 2.249e-06, 2.239e-06, 2.235e-06, 2.185e-06, 2.141e-06,
2251 2.124e-06, 2.090e-06, 2.068e-06, 2.100e-06, 2.104e-06,
2252 2.142e-06, 2.181e-06, 2.257e-06, 2.362e-06, 2.500e-06,
2253 2.664e-06, 2.884e-06, 3.189e-06, 3.480e-06, 3.847e-06,
2254 4.313e-06, 4.790e-06, 5.250e-06, 5.989e-06, 6.692e-06,
2255 7.668e-06, 8.520e-06, 9.606e-06, 1.073e-05, 1.225e-05,
2256 1.377e-05, 1.582e-05, 1.761e-05, 2.029e-05, 2.284e-05,
2257 2.602e-05, 2.940e-05, 3.483e-05, 3.928e-05, 4.618e-05,
2258 5.240e-05, 6.132e-05, 7.183e-05, 8.521e-05, 9.111e-05,
2259 1.070e-04, 1.184e-04, 1.264e-04, 1.475e-04, 1.612e-04,
2260 1.704e-04, 1.818e-04, 1.924e-04, 1.994e-04, 2.061e-04,
2261 2.180e-04, 2.187e-04, 2.200e-04, 2.196e-04, 2.131e-04,
2262 2.015e-04, 1.988e-04, 1.847e-04, 1.729e-04, 1.597e-04,
2263 1.373e-04, 1.262e-04, 1.087e-04, 9.439e-05, 8.061e-05,
2264 7.093e-05, 6.049e-05, 5.120e-05, 4.435e-05, 3.817e-05,
2265 3.340e-05, 2.927e-05, 2.573e-05, 2.291e-05, 2.040e-05,
2266 1.827e-05, 1.636e-05, 1.463e-05, 1.309e-05, 1.170e-05,
2267 1.047e-05, 9.315e-06, 8.328e-06, 7.458e-06, 6.665e-06,
2268 5.940e-06, 5.316e-06, 4.752e-06, 4.252e-06, 3.825e-06,
2269 3.421e-06, 3.064e-06, 2.746e-06, 2.465e-06, 2.216e-06,
2270 1.990e-06, 1.790e-06, 1.609e-06, 1.449e-06, 1.306e-06,
2271 1.177e-06, 1.063e-06, 9.607e-07, 8.672e-07, 7.855e-07,
2272 7.118e-07, 6.460e-07, 5.871e-07, 5.340e-07, 4.868e-07,
2273 4.447e-07, 4.068e-07, 3.729e-07, 3.423e-07, 3.151e-07,
2274 2.905e-07, 2.686e-07, 2.484e-07, 2.306e-07, 2.142e-07,
2275 1.995e-07, 1.860e-07, 1.738e-07, 1.626e-07, 1.522e-07,
2276 1.427e-07, 1.338e-07, 1.258e-07, 1.183e-07, 1.116e-07,
2277 1.056e-07, 9.972e-08, 9.460e-08, 9.007e-08, 8.592e-08,
2278 8.195e-08, 7.816e-08, 7.483e-08, 7.193e-08, 6.892e-08,
2279 6.642e-08, 6.386e-08, 6.154e-08, 5.949e-08, 5.764e-08,
2280 5.622e-08, 5.479e-08, 5.364e-08, 5.301e-08, 5.267e-08,
2281 5.263e-08, 5.313e-08, 5.410e-08, 5.550e-08, 5.745e-08,
2282 6.003e-08, 6.311e-08, 6.713e-08, 7.173e-08, 7.724e-08,
2283 8.368e-08, 9.121e-08, 9.986e-08, 1.097e-07, 1.209e-07,
2284 1.338e-07, 1.486e-07, 1.651e-07, 1.837e-07, 2.048e-07,
2285 2.289e-07, 2.557e-07, 2.857e-07, 3.195e-07, 3.587e-07,
2286 4.015e-07, 4.497e-07, 5.049e-07, 5.665e-07, 6.366e-07,
2287 7.121e-07, 7.996e-07, 8.946e-07, 1.002e-06, 1.117e-06,
2288 1.262e-06, 1.416e-06, 1.611e-06, 1.807e-06, 2.056e-06,
2289 2.351e-06, 2.769e-06, 3.138e-06, 3.699e-06, 4.386e-06,
2290 5.041e-06, 6.074e-06, 6.812e-06, 7.790e-06, 8.855e-06,
2291 1.014e-05, 1.095e-05, 1.245e-05, 1.316e-05, 1.390e-05,
2292 1.504e-05, 1.583e-05, 1.617e-05, 1.652e-05, 1.713e-05,
2293 1.724e-05, 1.715e-05, 1.668e-05, 1.629e-05, 1.552e-05,
2294 1.478e-05, 1.340e-05, 1.245e-05, 1.121e-05, 9.575e-06,
2295 8.956e-06, 7.345e-06, 6.597e-06, 5.612e-06, 4.818e-06,
2296 4.165e-06, 3.579e-06, 3.041e-06, 2.623e-06, 2.290e-06,
2297 1.984e-06, 1.748e-06, 1.534e-06, 1.369e-06, 1.219e-06,
2298 1.092e-06, 9.800e-07, 8.762e-07, 7.896e-07, 7.104e-07,
2299 6.364e-07, 5.691e-07, 5.107e-07, 4.575e-07, 4.090e-07,
2300 3.667e-07, 3.287e-07, 2.931e-07, 2.633e-07, 2.356e-07,
2301 2.111e-07, 1.895e-07, 1.697e-07, 1.525e-07, 1.369e-07,
2302 1.233e-07, 1.114e-07, 9.988e-08, 9.004e-08, 8.149e-08,
2303 7.352e-08, 6.662e-08, 6.030e-08, 5.479e-08, 4.974e-08,
2304 4.532e-08, 4.129e-08, 3.781e-08, 3.462e-08, 3.176e-08,
2305 2.919e-08, 2.687e-08, 2.481e-08, 2.292e-08, 2.119e-08,
2306 1.967e-08, 1.828e-08, 1.706e-08, 1.589e-08, 1.487e-08,
2307 1.393e-08, 1.307e-08, 1.228e-08, 1.156e-08, 1.089e-08,
2308 1.028e-08, 9.696e-09, 9.159e-09, 8.658e-09, 8.187e-09,
2309 7.746e-09, 7.340e-09, 6.953e-09, 6.594e-09, 6.259e-09,
2310 5.948e-09, 5.660e-09, 5.386e-09, 5.135e-09, 4.903e-09,
2311 4.703e-09, 4.515e-09, 4.362e-09, 4.233e-09, 4.117e-09,
2312 4.017e-09, 3.962e-09, 3.924e-09, 3.905e-09, 3.922e-09,
2313 3.967e-09, 4.046e-09, 4.165e-09, 4.320e-09, 4.522e-09,
2314 4.769e-09, 5.083e-09, 5.443e-09, 5.872e-09, 6.366e-09,
2315 6.949e-09, 7.601e-09, 8.371e-09, 9.220e-09, 1.020e-08,
2316 1.129e-08, 1.251e-08, 1.393e-08, 1.542e-08, 1.720e-08,
2317 1.926e-08, 2.152e-08, 2.392e-08, 2.678e-08, 3.028e-08,
2318 3.390e-08, 3.836e-08, 4.309e-08, 4.900e-08, 5.481e-08,
2319 6.252e-08, 7.039e-08, 7.883e-08, 8.849e-08, 1.012e-07,
2320 1.142e-07, 1.300e-07, 1.475e-07, 1.732e-07, 1.978e-07,
2321 2.304e-07, 2.631e-07, 2.988e-07, 3.392e-07, 3.690e-07,
2322 4.355e-07, 4.672e-07, 5.110e-07, 5.461e-07, 5.828e-07,
2323 6.233e-07, 6.509e-07, 6.672e-07, 6.969e-07, 7.104e-07,
2324 7.439e-07, 7.463e-07, 7.708e-07, 7.466e-07, 7.668e-07,
2325 7.549e-07, 7.586e-07, 7.384e-07, 7.439e-07, 7.785e-07,
2326 7.915e-07, 8.310e-07, 8.745e-07, 9.558e-07, 1.038e-06,
2327 1.173e-06, 1.304e-06, 1.452e-06, 1.671e-06, 1.931e-06,
2328 2.239e-06, 2.578e-06, 3.032e-06, 3.334e-06, 3.980e-06,
2329 4.300e-06, 4.518e-06, 5.321e-06, 5.508e-06, 6.211e-06,
2330 6.590e-06, 7.046e-06, 7.555e-06, 7.558e-06, 7.875e-06,
2331 8.319e-06, 8.433e-06, 8.590e-06, 8.503e-06, 8.304e-06,
2332 8.336e-06, 7.739e-06, 7.301e-06, 6.827e-06, 6.078e-06,
2333 5.551e-06, 4.762e-06, 4.224e-06, 3.538e-06, 2.984e-06,
2334 2.619e-06, 2.227e-06, 1.923e-06, 1.669e-06, 1.462e-06,
2335 1.294e-06, 1.155e-06, 1.033e-06, 9.231e-07, 8.238e-07,
2336 7.360e-07, 6.564e-07, 5.869e-07, 5.236e-07, 4.673e-07,
2337 4.174e-07, 3.736e-07, 3.330e-07, 2.976e-07, 2.657e-07,
2338 2.367e-07, 2.106e-07, 1.877e-07, 1.671e-07, 1.494e-07,
2339 1.332e-07, 1.192e-07, 1.065e-07, 9.558e-08, 8.586e-08,
2340 7.717e-08, 6.958e-08, 6.278e-08, 5.666e-08, 5.121e-08,
2341 4.647e-08, 4.213e-08, 3.815e-08, 3.459e-08, 3.146e-08,
2342 2.862e-08, 2.604e-08, 2.375e-08, 2.162e-08, 1.981e-08,
2343 1.817e-08, 1.670e-08, 1.537e-08, 1.417e-08, 1.310e-08,
2344 1.215e-08, 1.128e-08, 1.050e-08, 9.793e-09, 9.158e-09,
2345 8.586e-09, 8.068e-09, 7.595e-09, 7.166e-09, 6.778e-09,
2346 6.427e-09, 6.108e-09, 5.826e-09, 5.571e-09, 5.347e-09,
2347 5.144e-09, 4.968e-09, 4.822e-09, 4.692e-09, 4.589e-09,
2348 4.506e-09, 4.467e-09, 4.440e-09, 4.466e-09, 4.515e-09,
2349 4.718e-09, 4.729e-09, 4.937e-09, 5.249e-09, 5.466e-09,
2350 5.713e-09, 6.030e-09, 6.436e-09, 6.741e-09, 7.330e-09,
2351 7.787e-09, 8.414e-09, 8.908e-09, 9.868e-09, 1.069e-08,
2352 1.158e-08, 1.253e-08, 1.300e-08, 1.409e-08, 1.470e-08,
2353 1.548e-08, 1.612e-08, 1.666e-08, 1.736e-08, 1.763e-08,
2354 1.812e-08, 1.852e-08, 1.923e-08, 1.897e-08, 1.893e-08,
2355 1.888e-08, 1.868e-08, 1.895e-08, 1.899e-08, 1.876e-08,
2356 1.960e-08, 2.020e-08, 2.121e-08, 2.239e-08, 2.379e-08,
2357 2.526e-08, 2.766e-08, 2.994e-08, 3.332e-08, 3.703e-08,
2358 4.158e-08, 4.774e-08, 5.499e-08, 6.355e-08, 7.349e-08,
2359 8.414e-08, 9.846e-08, 1.143e-07, 1.307e-07, 1.562e-07,
2360 1.817e-07, 2.011e-07, 2.192e-07, 2.485e-07, 2.867e-07,
2361 3.035e-07, 3.223e-07, 3.443e-07, 3.617e-07, 3.793e-07,
2362 3.793e-07, 3.839e-07, 4.081e-07, 4.117e-07, 4.085e-07,
2363 3.920e-07, 3.851e-07, 3.754e-07, 3.490e-07, 3.229e-07,
2364 2.978e-07, 2.691e-07, 2.312e-07, 2.029e-07, 1.721e-07,
2365 1.472e-07, 1.308e-07, 1.132e-07, 9.736e-08, 8.458e-08,
2366 7.402e-08, 6.534e-08, 5.811e-08, 5.235e-08, 4.762e-08,
2367 4.293e-08, 3.896e-08, 3.526e-08, 3.165e-08, 2.833e-08,
2368 2.551e-08, 2.288e-08, 2.036e-08, 1.820e-08, 1.626e-08,
2369 1.438e-08, 1.299e-08, 1.149e-08, 1.030e-08, 9.148e-09,
2370 8.122e-09, 7.264e-09, 6.425e-09, 5.777e-09, 5.060e-09,
2371 4.502e-09, 4.013e-09, 3.567e-09, 3.145e-09, 2.864e-09,
2372 2.553e-09, 2.311e-09, 2.087e-09, 1.886e-09, 1.716e-09,
2373 1.556e-09, 1.432e-09, 1.311e-09, 1.202e-09, 1.104e-09,
2374 1.013e-09, 9.293e-10, 8.493e-10, 7.790e-10, 7.185e-10,
2375 6.642e-10, 6.141e-10, 5.684e-10, 5.346e-10, 5.032e-10,
2376 4.725e-10, 4.439e-10, 4.176e-10, 3.930e-10, 3.714e-10,
2377 3.515e-10, 3.332e-10, 3.167e-10, 3.020e-10, 2.887e-10,
2378 2.769e-10, 2.665e-10, 2.578e-10, 2.503e-10, 2.436e-10,
2379 2.377e-10, 2.342e-10, 2.305e-10, 2.296e-10, 2.278e-10,
2380 2.321e-10, 2.355e-10, 2.402e-10, 2.478e-10, 2.670e-10,
2381 2.848e-10, 2.982e-10, 3.263e-10, 3.438e-10, 3.649e-10,
2382 3.829e-10, 4.115e-10, 4.264e-10, 4.473e-10, 4.630e-10,
2383 4.808e-10, 4.995e-10, 5.142e-10, 5.313e-10, 5.318e-10,
2384 5.358e-10, 5.452e-10, 5.507e-10, 5.698e-10, 5.782e-10,
2385 5.983e-10, 6.164e-10, 6.532e-10, 6.811e-10, 7.624e-10,
2386 8.302e-10, 9.067e-10, 9.937e-10, 1.104e-09, 1.221e-09,
2387 1.361e-09, 1.516e-09, 1.675e-09, 1.883e-09, 2.101e-09,
2388 2.349e-09, 2.614e-09, 2.920e-09, 3.305e-09, 3.724e-09,
2389 4.142e-09, 4.887e-09, 5.614e-09, 6.506e-09, 7.463e-09,
2390 8.817e-09, 9.849e-09, 1.187e-08, 1.321e-08, 1.474e-08,
2391 1.698e-08, 1.794e-08, 2.090e-08, 2.211e-08, 2.362e-08,
2392 2.556e-08, 2.729e-08, 2.880e-08, 3.046e-08, 3.167e-08,
2393 3.367e-08, 3.457e-08, 3.590e-08, 3.711e-08, 3.826e-08,
2394 4.001e-08, 4.211e-08, 4.315e-08, 4.661e-08, 5.010e-08,
2395 5.249e-08, 5.840e-08, 6.628e-08, 7.512e-08, 8.253e-08,
2396 9.722e-08, 1.067e-07, 1.153e-07, 1.347e-07, 1.428e-07,
2397 1.577e-07, 1.694e-07, 1.833e-07, 1.938e-07, 2.108e-07,
2398 2.059e-07, 2.157e-07, 2.185e-07, 2.208e-07, 2.182e-07,
2399 2.093e-07, 2.014e-07, 1.962e-07, 1.819e-07, 1.713e-07,
2400 1.510e-07, 1.340e-07, 1.154e-07, 9.890e-08, 8.880e-08,
2401 7.673e-08, 6.599e-08, 5.730e-08, 5.081e-08, 4.567e-08,
2402 4.147e-08, 3.773e-08, 3.460e-08, 3.194e-08, 2.953e-08,
2403 2.759e-08, 2.594e-08, 2.442e-08, 2.355e-08, 2.283e-08,
2404 2.279e-08, 2.231e-08, 2.279e-08, 2.239e-08, 2.210e-08,
2405 2.309e-08, 2.293e-08, 2.352e-08, 2.415e-08, 2.430e-08,
2406 2.426e-08, 2.465e-08, 2.500e-08, 2.496e-08, 2.465e-08,
2407 2.445e-08, 2.383e-08, 2.299e-08, 2.165e-08, 2.113e-08,
2408 1.968e-08, 1.819e-08, 1.644e-08, 1.427e-08, 1.270e-08,
2409 1.082e-08, 9.428e-09, 8.091e-09, 6.958e-09, 5.988e-09,
2410 5.246e-09, 4.601e-09, 4.098e-09, 3.664e-09, 3.287e-09,
2411 2.942e-09, 2.656e-09, 2.364e-09, 2.118e-09, 1.903e-09,
2412 1.703e-09, 1.525e-09, 1.365e-09, 1.229e-09, 1.107e-09,
2413 9.960e-10, 8.945e-10, 8.080e-10, 7.308e-10, 6.616e-10,
2414 5.994e-10, 5.422e-10, 4.929e-10, 4.478e-10, 4.070e-10,
2415 3.707e-10, 3.379e-10, 3.087e-10, 2.823e-10, 2.592e-10,
2416 2.385e-10, 2.201e-10, 2.038e-10, 1.897e-10, 1.774e-10,
2417 1.667e-10, 1.577e-10, 1.502e-10, 1.437e-10, 1.394e-10,
2418 1.358e-10, 1.324e-10, 1.329e-10, 1.324e-10, 1.360e-10,
2419 1.390e-10, 1.424e-10, 1.544e-10, 1.651e-10, 1.817e-10,
2420 1.984e-10, 2.195e-10, 2.438e-10, 2.700e-10, 2.991e-10,
2421 3.322e-10, 3.632e-10, 3.957e-10, 4.360e-10, 4.701e-10,
2422 5.030e-10, 5.381e-10, 5.793e-10, 6.190e-10, 6.596e-10,
2423 7.004e-10, 7.561e-10, 7.934e-10, 8.552e-10, 9.142e-10,
2424 9.570e-10, 1.027e-09, 1.097e-09, 1.193e-09, 1.334e-09,
2425 1.470e-09, 1.636e-09, 1.871e-09, 2.122e-09, 2.519e-09,
2426 2.806e-09, 3.203e-09, 3.846e-09, 4.362e-09, 5.114e-09,
2427 5.643e-09, 6.305e-09, 6.981e-09, 7.983e-09, 8.783e-09,
2428 9.419e-09, 1.017e-08, 1.063e-08, 1.121e-08, 1.130e-08,
2429 1.201e-08, 1.225e-08, 1.232e-08, 1.223e-08, 1.177e-08,
2430 1.151e-08, 1.116e-08, 1.047e-08, 9.698e-09, 8.734e-09,
2431 8.202e-09, 7.041e-09, 6.074e-09, 5.172e-09, 4.468e-09,
2432 3.913e-09, 3.414e-09, 2.975e-09, 2.650e-09, 2.406e-09,
2433 2.173e-09, 2.009e-09, 1.861e-09, 1.727e-09, 1.612e-09,
2434 1.514e-09, 1.430e-09, 1.362e-09, 1.333e-09, 1.288e-09,
2435 1.249e-09, 1.238e-09, 1.228e-09, 1.217e-09, 1.202e-09,
2436 1.209e-09, 1.177e-09, 1.157e-09, 1.165e-09, 1.142e-09,
2437 1.131e-09, 1.138e-09, 1.117e-09, 1.100e-09, 1.069e-09,
2438 1.023e-09, 1.005e-09, 9.159e-10, 8.863e-10, 7.865e-10,
2439 7.153e-10, 6.247e-10, 5.846e-10, 5.133e-10, 4.360e-10,
2440 3.789e-10, 3.335e-10, 2.833e-10, 2.483e-10, 2.155e-10,
2441 1.918e-10, 1.709e-10, 1.529e-10, 1.374e-10, 1.235e-10,
2442 1.108e-10, 9.933e-11, 8.932e-11, 8.022e-11, 7.224e-11,
2443 6.520e-11, 5.896e-11, 5.328e-11, 4.813e-11, 4.365e-11,
2444 3.961e-11, 3.594e-11, 3.266e-11, 2.967e-11, 2.701e-11,
2445 2.464e-11, 2.248e-11, 2.054e-11, 1.878e-11, 1.721e-11,
2446 1.579e-11, 1.453e-11, 1.341e-11, 1.241e-11, 1.154e-11,
2447 1.078e-11, 1.014e-11, 9.601e-12, 9.167e-12, 8.838e-12,
2448 8.614e-12, 8.493e-12, 8.481e-12, 8.581e-12, 8.795e-12,
2449 9.131e-12, 9.601e-12, 1.021e-11, 1.097e-11, 1.191e-11,
2450 1.303e-11, 1.439e-11, 1.601e-11, 1.778e-11, 1.984e-11,
2451 2.234e-11, 2.474e-11, 2.766e-11, 3.085e-11, 3.415e-11,
2452 3.821e-11, 4.261e-11, 4.748e-11, 5.323e-11, 5.935e-11,
2453 6.619e-11, 7.418e-11, 8.294e-11, 9.260e-11, 1.039e-10,
2454 1.156e-10, 1.297e-10, 1.460e-10, 1.641e-10, 1.858e-10,
2455 2.100e-10, 2.383e-10, 2.724e-10, 3.116e-10, 3.538e-10,
2456 4.173e-10, 4.727e-10, 5.503e-10, 6.337e-10, 7.320e-10,
2457 8.298e-10, 9.328e-10, 1.059e-09, 1.176e-09, 1.328e-09,
2458 1.445e-09, 1.593e-09, 1.770e-09, 1.954e-09, 2.175e-09,
2459 2.405e-09, 2.622e-09, 2.906e-09, 3.294e-09, 3.713e-09,
2460 3.980e-09, 4.384e-09, 4.987e-09, 5.311e-09, 5.874e-09,
2461 6.337e-09, 7.027e-09, 7.390e-09, 7.769e-09, 8.374e-09,
2462 8.605e-09, 9.165e-09, 9.415e-09, 9.511e-09, 9.704e-09,
2463 9.588e-09, 9.450e-09, 9.086e-09, 8.798e-09, 8.469e-09,
2464 7.697e-09, 7.168e-09, 6.255e-09, 5.772e-09, 4.970e-09,
2465 4.271e-09, 3.653e-09, 3.154e-09, 2.742e-09, 2.435e-09,
2466 2.166e-09, 1.936e-09, 1.731e-09, 1.556e-09, 1.399e-09,
2467 1.272e-09, 1.157e-09, 1.066e-09, 9.844e-10, 9.258e-10,
2468 8.787e-10, 8.421e-10, 8.083e-10, 8.046e-10, 8.067e-10,
2469 8.181e-10, 8.325e-10, 8.517e-10, 9.151e-10, 9.351e-10,
2470 9.677e-10, 1.071e-09, 1.126e-09, 1.219e-09, 1.297e-09,
2471 1.408e-09, 1.476e-09, 1.517e-09, 1.600e-09, 1.649e-09,
2472 1.678e-09, 1.746e-09, 1.742e-09, 1.728e-09, 1.699e-09,
2473 1.655e-09, 1.561e-09, 1.480e-09, 1.451e-09, 1.411e-09,
2474 1.171e-09, 1.106e-09, 9.714e-10, 8.523e-10, 7.346e-10,
2475 6.241e-10, 5.371e-10, 4.704e-10, 4.144e-10, 3.683e-10,
2476 3.292e-10, 2.942e-10, 2.620e-10, 2.341e-10, 2.104e-10,
2477 1.884e-10, 1.700e-10, 1.546e-10, 1.394e-10, 1.265e-10,
2478 1.140e-10, 1.019e-10, 9.279e-11, 8.283e-11, 7.458e-11,
2479 6.668e-11, 5.976e-11, 5.330e-11, 4.794e-11, 4.289e-11,
2480 3.841e-11, 3.467e-11, 3.130e-11, 2.832e-11, 2.582e-11,
2481 2.356e-11, 2.152e-11, 1.970e-11, 1.808e-11, 1.664e-11,
2482 1.539e-11, 1.434e-11, 1.344e-11, 1.269e-11, 1.209e-11,
2483 1.162e-11, 1.129e-11, 1.108e-11, 1.099e-11, 1.103e-11,
2484 1.119e-11, 1.148e-11, 1.193e-11, 1.252e-11, 1.329e-11,
2485 1.421e-11, 1.555e-11, 1.685e-11, 1.839e-11, 2.054e-11,
2486 2.317e-11, 2.571e-11, 2.839e-11, 3.171e-11, 3.490e-11,
2487 3.886e-11, 4.287e-11, 4.645e-11, 5.047e-11, 5.592e-11,
2488 6.109e-11, 6.628e-11, 7.381e-11, 8.088e-11, 8.966e-11,
2489 1.045e-10, 1.120e-10, 1.287e-10, 1.486e-10, 1.662e-10,
2490 1.866e-10, 2.133e-10, 2.524e-10, 2.776e-10, 3.204e-10,
2491 3.559e-10, 4.028e-10, 4.448e-10, 4.882e-10, 5.244e-10,
2492 5.605e-10, 6.018e-10, 6.328e-10, 6.579e-10, 6.541e-10,
2493 7.024e-10, 7.074e-10, 7.068e-10, 7.009e-10, 6.698e-10,
2494 6.545e-10, 6.209e-10, 5.834e-10, 5.412e-10, 5.001e-10,
2495 4.231e-10, 3.727e-10, 3.211e-10, 2.833e-10, 2.447e-10,
2496 2.097e-10, 1.843e-10, 1.639e-10, 1.449e-10, 1.270e-10,
2497 1.161e-10, 1.033e-10, 9.282e-11, 8.407e-11, 7.639e-11,
2498 7.023e-11, 6.474e-11, 6.142e-11, 5.760e-11, 5.568e-11,
2499 5.472e-11, 5.390e-11, 5.455e-11, 5.540e-11, 5.587e-11,
2500 6.230e-11, 6.490e-11, 6.868e-11, 7.382e-11, 8.022e-11,
2501 8.372e-11, 9.243e-11, 1.004e-10, 1.062e-10, 1.130e-10,
2502 1.176e-10, 1.244e-10, 1.279e-10, 1.298e-10, 1.302e-10,
2503 1.312e-10, 1.295e-10, 1.244e-10, 1.211e-10, 1.167e-10,
2504 1.098e-10, 9.927e-11, 8.854e-11, 8.011e-11, 7.182e-11,
2505 5.923e-11, 5.212e-11, 4.453e-11, 3.832e-11, 3.371e-11,
2506 2.987e-11, 2.651e-11, 2.354e-11, 2.093e-11, 1.863e-11,
2507 1.662e-11, 1.486e-11, 1.331e-11, 1.193e-11, 1.071e-11,
2508 9.628e-12, 8.660e-12, 7.801e-12, 7.031e-12, 6.347e-12,
2509 5.733e-12, 5.182e-12, 4.695e-12, 4.260e-12, 3.874e-12,
2510 3.533e-12, 3.235e-12, 2.979e-12, 2.760e-12, 2.579e-12,
2511 2.432e-12, 2.321e-12, 2.246e-12, 2.205e-12, 2.196e-12,
2512 2.223e-12, 2.288e-12, 2.387e-12, 2.525e-12, 2.704e-12,
2513 2.925e-12, 3.191e-12, 3.508e-12, 3.876e-12, 4.303e-12,
2514 4.793e-12, 5.347e-12, 5.978e-12, 6.682e-12, 7.467e-12,
2515 8.340e-12, 9.293e-12, 1.035e-11, 1.152e-11, 1.285e-11,
2516 1.428e-11, 1.586e-11, 1.764e-11, 1.972e-11, 2.214e-11,
2517 2.478e-11, 2.776e-11, 3.151e-11, 3.591e-11, 4.103e-11,
2518 4.660e-11, 5.395e-11, 6.306e-11, 7.172e-11, 8.358e-11,
2519 9.670e-11, 1.110e-10, 1.325e-10, 1.494e-10, 1.736e-10,
2520 2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10,
2521 3.727e-10, 4.373e-10, 4.838e-10, 5.483e-10, 6.006e-10,
2522 6.535e-10, 6.899e-10, 7.687e-10, 8.444e-10, 8.798e-10,
2523 9.135e-10, 9.532e-10, 9.757e-10, 9.968e-10, 1.006e-09,
2524 9.949e-10, 9.789e-10, 9.564e-10, 9.215e-10, 8.510e-10,
2525 8.394e-10, 7.707e-10, 7.152e-10, 6.274e-10, 5.598e-10,
2526 5.028e-10, 4.300e-10, 3.710e-10, 3.245e-10, 2.809e-10,
2527 2.461e-10, 2.154e-10, 1.910e-10, 1.685e-10, 1.487e-10,
2528 1.313e-10, 1.163e-10, 1.031e-10, 9.172e-11, 8.221e-11,
2529 7.382e-11, 6.693e-11, 6.079e-11, 5.581e-11, 5.167e-11,
2530 4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11, 3.949e-11,
2531 3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11,
2532 4.240e-11, 4.487e-11, 4.806e-11, 5.133e-11, 5.518e-11,
2533 5.919e-11, 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11,
2534 9.252e-11, 9.727e-11, 1.045e-10, 1.117e-10, 1.200e-10,
2535 1.275e-10, 1.341e-10, 1.362e-10, 1.438e-10, 1.450e-10,
2536 1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10, 1.301e-10,
2537 1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11,
2538 7.618e-11, 6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11,
2539 3.773e-11, 3.331e-11, 2.958e-11, 2.629e-11, 2.316e-11,
2540 2.073e-11, 1.841e-11, 1.635e-11, 1.464e-11, 1.310e-11,
2541 1.160e-11, 1.047e-11, 9.408e-12, 8.414e-12, 7.521e-12,
2542 6.705e-12, 5.993e-12, 5.371e-12, 4.815e-12, 4.338e-12,
2543 3.921e-12, 3.567e-12, 3.265e-12, 3.010e-12, 2.795e-12,
2544 2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12,
2545 2.165e-12, 2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12,
2546 2.502e-12, 2.682e-12, 2.908e-12, 3.187e-12, 3.533e-12,
2547 3.946e-12, 4.418e-12, 5.013e-12, 5.708e-12, 6.379e-12,
2548 7.430e-12, 8.390e-12, 9.510e-12, 1.078e-11, 1.259e-11,
2549 1.438e-11, 1.630e-11, 1.814e-11, 2.055e-11, 2.348e-11,
2550 2.664e-11, 2.956e-11, 3.300e-11, 3.677e-11, 4.032e-11,
2551 4.494e-11, 4.951e-11, 5.452e-11, 6.014e-11, 6.500e-11,
2552 6.915e-11, 7.450e-11, 7.971e-11, 8.468e-11, 8.726e-11,
2553 8.995e-11, 9.182e-11, 9.509e-11, 9.333e-11, 9.386e-11,
2554 9.457e-11, 9.210e-11, 9.019e-11, 8.680e-11, 8.298e-11,
2555 7.947e-11, 7.460e-11, 7.082e-11, 6.132e-11, 5.855e-11,
2556 5.073e-11, 4.464e-11, 3.825e-11, 3.375e-11, 2.911e-11,
2557 2.535e-11, 2.160e-11, 1.907e-11, 1.665e-11, 1.463e-11,
2558 1.291e-11, 1.133e-11, 9.997e-12, 8.836e-12, 7.839e-12,
2559 6.943e-12, 6.254e-12, 5.600e-12, 5.029e-12, 4.529e-12,
2560 4.102e-12, 3.737e-12, 3.428e-12, 3.169e-12, 2.959e-12,
2561 2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
2562 2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12,
2563 3.631e-12, 3.979e-12, 4.248e-12, 4.817e-12, 5.266e-12,
2564 5.836e-12, 6.365e-12, 6.807e-12, 7.470e-12, 7.951e-12,
2565 8.636e-12, 8.972e-12, 9.314e-12, 9.445e-12, 1.003e-11,
2566 1.013e-11, 9.937e-12, 9.729e-12, 9.064e-12, 9.119e-12,
2567 9.124e-12, 8.704e-12, 8.078e-12, 7.470e-12, 6.329e-12,
2568 5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12,
2569 2.731e-12, 2.415e-12, 2.150e-12, 1.926e-12, 1.737e-12,
2570 1.578e-12, 1.447e-12, 1.340e-12, 1.255e-12, 1.191e-12,
2571 1.146e-12, 1.121e-12, 1.114e-12, 1.126e-12, 1.156e-12,
2572 1.207e-12, 1.278e-12, 1.372e-12, 1.490e-12, 1.633e-12,
2573 1.805e-12, 2.010e-12, 2.249e-12, 2.528e-12, 2.852e-12,
2574 3.228e-12, 3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12,
2575 6.176e-12, 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11,
2576 1.276e-11, 1.417e-11, 1.615e-11, 1.840e-11, 2.155e-11,
2577 2.429e-11, 2.826e-11, 3.222e-11, 3.664e-11, 4.140e-11,
2578 4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11, 8.316e-11,
2579 9.242e-11, 1.070e-10, 1.223e-10, 1.341e-10, 1.553e-10,
2580 1.703e-10, 1.900e-10, 2.022e-10, 2.233e-10, 2.345e-10,
2581 2.438e-10, 2.546e-10, 2.599e-10, 2.661e-10, 2.703e-10,
2582 2.686e-10, 2.662e-10, 2.560e-10, 2.552e-10, 2.378e-10,
2583 2.252e-10, 2.146e-10, 1.885e-10, 1.668e-10, 1.441e-10,
2584 1.295e-10, 1.119e-10, 9.893e-11, 8.687e-11, 7.678e-11,
2585 6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11, 3.997e-11,
2586 3.511e-11};
2587
2588
2589// H2O foreign continuum parameters at all temperatures
2590// date of last update: 11/18/02
2591// units of (CM**3/MOL)*1.E-20
2592const Numeric FH2O_ckd_mt_100_v1 = -20.0;
2593const Numeric FH2O_ckd_mt_100_v2 = 20000.0;
2594const Numeric FH2O_ckd_mt_100_dv = 10.0;
2595const int FH2O_ckd_mt_100_npt = 2003;
2596const double FH2O_ckd_mt_100[FH2O_ckd_mt_100_npt+addF77fields] = {
2597 0.000e0, 1.205e-02, 1.126e-02,
2598 1.095e-02, 1.126e-02, 1.205e-02, 1.322e-02, 1.430e-02,
2599 1.506e-02, 1.548e-02, 1.534e-02, 1.486e-02, 1.373e-02,
2600 1.262e-02, 1.134e-02, 1.001e-02, 8.702e-03, 7.475e-03,
2601 6.481e-03, 5.480e-03, 4.600e-03, 3.833e-03, 3.110e-03,
2602 2.543e-03, 2.049e-03, 1.680e-03, 1.374e-03, 1.046e-03,
2603 8.193e-04, 6.267e-04, 4.968e-04, 3.924e-04, 2.983e-04,
2604 2.477e-04, 1.997e-04, 1.596e-04, 1.331e-04, 1.061e-04,
2605 8.942e-05, 7.168e-05, 5.887e-05, 4.848e-05, 3.817e-05,
2606 3.170e-05, 2.579e-05, 2.162e-05, 1.768e-05, 1.490e-05,
2607 1.231e-05, 1.013e-05, 8.555e-06, 7.328e-06, 6.148e-06,
2608 5.207e-06, 4.387e-06, 3.741e-06, 3.220e-06, 2.753e-06,
2609 2.346e-06, 1.985e-06, 1.716e-06, 1.475e-06, 1.286e-06,
2610 1.122e-06, 9.661e-07, 8.284e-07, 7.057e-07, 6.119e-07,
2611 5.290e-07, 4.571e-07, 3.948e-07, 3.432e-07, 2.983e-07,
2612 2.589e-07, 2.265e-07, 1.976e-07, 1.704e-07, 1.456e-07,
2613 1.260e-07, 1.101e-07, 9.648e-08, 8.415e-08, 7.340e-08,
2614 6.441e-08, 5.643e-08, 4.940e-08, 4.276e-08, 3.703e-08,
2615 3.227e-08, 2.825e-08, 2.478e-08, 2.174e-08, 1.898e-08,
2616 1.664e-08, 1.458e-08, 1.278e-08, 1.126e-08, 9.891e-09,
2617 8.709e-09, 7.652e-09, 6.759e-09, 5.975e-09, 5.310e-09,
2618 4.728e-09, 4.214e-09, 3.792e-09, 3.463e-09, 3.226e-09,
2619 2.992e-09, 2.813e-09, 2.749e-09, 2.809e-09, 2.913e-09,
2620 3.037e-09, 3.413e-09, 3.738e-09, 4.189e-09, 4.808e-09,
2621 5.978e-09, 7.088e-09, 8.071e-09, 9.610e-09, 1.210e-08,
2622 1.500e-08, 1.764e-08, 2.221e-08, 2.898e-08, 3.948e-08,
2623 5.068e-08, 6.227e-08, 7.898e-08, 1.033e-07, 1.437e-07,
2624 1.889e-07, 2.589e-07, 3.590e-07, 4.971e-07, 7.156e-07,
2625 9.983e-07, 1.381e-06, 1.929e-06, 2.591e-06, 3.453e-06,
2626 4.570e-06, 5.930e-06, 7.552e-06, 9.556e-06, 1.183e-05,
2627 1.425e-05, 1.681e-05, 1.978e-05, 2.335e-05, 2.668e-05,
2628 3.022e-05, 3.371e-05, 3.715e-05, 3.967e-05, 4.060e-05,
2629 4.010e-05, 3.809e-05, 3.491e-05, 3.155e-05, 2.848e-05,
2630 2.678e-05, 2.660e-05, 2.811e-05, 3.071e-05, 3.294e-05,
2631 3.459e-05, 3.569e-05, 3.560e-05, 3.434e-05, 3.186e-05,
2632 2.916e-05, 2.622e-05, 2.275e-05, 1.918e-05, 1.620e-05,
2633 1.373e-05, 1.182e-05, 1.006e-05, 8.556e-06, 7.260e-06,
2634 6.107e-06, 5.034e-06, 4.211e-06, 3.426e-06, 2.865e-06,
2635 2.446e-06, 1.998e-06, 1.628e-06, 1.242e-06, 1.005e-06,
2636 7.853e-07, 6.210e-07, 5.071e-07, 4.156e-07, 3.548e-07,
2637 2.825e-07, 2.261e-07, 1.916e-07, 1.510e-07, 1.279e-07,
2638 1.059e-07, 9.140e-08, 7.707e-08, 6.170e-08, 5.311e-08,
2639 4.263e-08, 3.518e-08, 2.961e-08, 2.457e-08, 2.119e-08,
2640 1.712e-08, 1.439e-08, 1.201e-08, 1.003e-08, 8.564e-09,
2641 7.199e-09, 6.184e-09, 5.206e-09, 4.376e-09, 3.708e-09,
2642 3.157e-09, 2.725e-09, 2.361e-09, 2.074e-09, 1.797e-09,
2643 1.562e-09, 1.364e-09, 1.196e-09, 1.042e-09, 8.862e-10,
2644 7.648e-10, 6.544e-10, 5.609e-10, 4.791e-10, 4.108e-10,
2645 3.531e-10, 3.038e-10, 2.618e-10, 2.268e-10, 1.969e-10,
2646 1.715e-10, 1.496e-10, 1.308e-10, 1.147e-10, 1.008e-10,
2647 8.894e-11, 7.885e-11, 7.031e-11, 6.355e-11, 5.854e-11,
2648 5.534e-11, 5.466e-11, 5.725e-11, 6.447e-11, 7.943e-11,
2649 1.038e-10, 1.437e-10, 2.040e-10, 2.901e-10, 4.051e-10,
2650 5.556e-10, 7.314e-10, 9.291e-10, 1.134e-09, 1.321e-09,
2651 1.482e-09, 1.596e-09, 1.669e-09, 1.715e-09, 1.762e-09,
2652 1.817e-09, 1.828e-09, 1.848e-09, 1.873e-09, 1.902e-09,
2653 1.894e-09, 1.864e-09, 1.841e-09, 1.797e-09, 1.704e-09,
2654 1.559e-09, 1.382e-09, 1.187e-09, 1.001e-09, 8.468e-10,
2655 7.265e-10, 6.521e-10, 6.381e-10, 6.660e-10, 7.637e-10,
2656 9.705e-10, 1.368e-09, 1.856e-09, 2.656e-09, 3.954e-09,
2657 5.960e-09, 8.720e-09, 1.247e-08, 1.781e-08, 2.491e-08,
2658 3.311e-08, 4.272e-08, 5.205e-08, 6.268e-08, 7.337e-08,
2659 8.277e-08, 9.185e-08, 1.004e-07, 1.091e-07, 1.159e-07,
2660 1.188e-07, 1.175e-07, 1.124e-07, 1.033e-07, 9.381e-08,
2661 8.501e-08, 7.956e-08, 7.894e-08, 8.331e-08, 9.102e-08,
2662 9.836e-08, 1.035e-07, 1.064e-07, 1.060e-07, 1.032e-07,
2663 9.808e-08, 9.139e-08, 8.442e-08, 7.641e-08, 6.881e-08,
2664 6.161e-08, 5.404e-08, 4.804e-08, 4.446e-08, 4.328e-08,
2665 4.259e-08, 4.421e-08, 4.673e-08, 4.985e-08, 5.335e-08,
2666 5.796e-08, 6.542e-08, 7.714e-08, 8.827e-08, 1.040e-07,
2667 1.238e-07, 1.499e-07, 1.829e-07, 2.222e-07, 2.689e-07,
2668 3.303e-07, 3.981e-07, 4.840e-07, 5.910e-07, 7.363e-07,
2669 9.087e-07, 1.139e-06, 1.455e-06, 1.866e-06, 2.440e-06,
2670 3.115e-06, 3.941e-06, 4.891e-06, 5.992e-06, 7.111e-06,
2671 8.296e-06, 9.210e-06, 9.987e-06, 1.044e-05, 1.073e-05,
2672 1.092e-05, 1.106e-05, 1.138e-05, 1.171e-05, 1.186e-05,
2673 1.186e-05, 1.179e-05, 1.166e-05, 1.151e-05, 1.160e-05,
2674 1.197e-05, 1.241e-05, 1.268e-05, 1.260e-05, 1.184e-05,
2675 1.063e-05, 9.204e-06, 7.584e-06, 6.053e-06, 4.482e-06,
2676 3.252e-06, 2.337e-06, 1.662e-06, 1.180e-06, 8.150e-07,
2677 5.950e-07, 4.354e-07, 3.302e-07, 2.494e-07, 1.930e-07,
2678 1.545e-07, 1.250e-07, 1.039e-07, 8.602e-08, 7.127e-08,
2679 5.897e-08, 4.838e-08, 4.018e-08, 3.280e-08, 2.720e-08,
2680 2.307e-08, 1.972e-08, 1.654e-08, 1.421e-08, 1.174e-08,
2681 1.004e-08, 8.739e-09, 7.358e-09, 6.242e-09, 5.303e-09,
2682 4.567e-09, 3.940e-09, 3.375e-09, 2.864e-09, 2.422e-09,
2683 2.057e-09, 1.750e-09, 1.505e-09, 1.294e-09, 1.101e-09,
2684 9.401e-10, 8.018e-10, 6.903e-10, 5.965e-10, 5.087e-10,
2685 4.364e-10, 3.759e-10, 3.247e-10, 2.809e-10, 2.438e-10,
2686 2.123e-10, 1.853e-10, 1.622e-10, 1.426e-10, 1.260e-10,
2687 1.125e-10, 1.022e-10, 9.582e-11, 9.388e-11, 9.801e-11,
2688 1.080e-10, 1.276e-10, 1.551e-10, 1.903e-10, 2.291e-10,
2689 2.724e-10, 3.117e-10, 3.400e-10, 3.562e-10, 3.625e-10,
2690 3.619e-10, 3.429e-10, 3.221e-10, 2.943e-10, 2.645e-10,
2691 2.338e-10, 2.062e-10, 1.901e-10, 1.814e-10, 1.827e-10,
2692 1.906e-10, 1.984e-10, 2.040e-10, 2.068e-10, 2.075e-10,
2693 2.018e-10, 1.959e-10, 1.897e-10, 1.852e-10, 1.791e-10,
2694 1.696e-10, 1.634e-10, 1.598e-10, 1.561e-10, 1.518e-10,
2695 1.443e-10, 1.377e-10, 1.346e-10, 1.342e-10, 1.375e-10,
2696 1.525e-10, 1.767e-10, 2.108e-10, 2.524e-10, 2.981e-10,
2697 3.477e-10, 4.262e-10, 5.326e-10, 6.646e-10, 8.321e-10,
2698 1.069e-09, 1.386e-09, 1.743e-09, 2.216e-09, 2.808e-09,
2699 3.585e-09, 4.552e-09, 5.907e-09, 7.611e-09, 9.774e-09,
2700 1.255e-08, 1.666e-08, 2.279e-08, 3.221e-08, 4.531e-08,
2701 6.400e-08, 9.187e-08, 1.295e-07, 1.825e-07, 2.431e-07,
2702 3.181e-07, 4.009e-07, 4.941e-07, 5.880e-07, 6.623e-07,
2703 7.155e-07, 7.451e-07, 7.594e-07, 7.541e-07, 7.467e-07,
2704 7.527e-07, 7.935e-07, 8.461e-07, 8.954e-07, 9.364e-07,
2705 9.843e-07, 1.024e-06, 1.050e-06, 1.059e-06, 1.074e-06,
2706 1.072e-06, 1.043e-06, 9.789e-07, 8.803e-07, 7.662e-07,
2707 6.378e-07, 5.133e-07, 3.958e-07, 2.914e-07, 2.144e-07,
2708 1.570e-07, 1.140e-07, 8.470e-08, 6.200e-08, 4.657e-08,
2709 3.559e-08, 2.813e-08, 2.222e-08, 1.769e-08, 1.391e-08,
2710 1.125e-08, 9.186e-09, 7.704e-09, 6.447e-09, 5.381e-09,
2711 4.442e-09, 3.669e-09, 3.057e-09, 2.564e-09, 2.153e-09,
2712 1.784e-09, 1.499e-09, 1.281e-09, 1.082e-09, 9.304e-10,
2713 8.169e-10, 6.856e-10, 5.866e-10, 5.043e-10, 4.336e-10,
2714 3.731e-10, 3.175e-10, 2.745e-10, 2.374e-10, 2.007e-10,
2715 1.737e-10, 1.508e-10, 1.302e-10, 1.130e-10, 9.672e-11,
2716 8.375e-11, 7.265e-11, 6.244e-11, 5.343e-11, 4.654e-11,
2717 3.975e-11, 3.488e-11, 3.097e-11, 2.834e-11, 2.649e-11,
2718 2.519e-11, 2.462e-11, 2.443e-11, 2.440e-11, 2.398e-11,
2719 2.306e-11, 2.183e-11, 2.021e-11, 1.821e-11, 1.599e-11,
2720 1.403e-11, 1.196e-11, 1.023e-11, 8.728e-12, 7.606e-12,
2721 6.941e-12, 6.545e-12, 6.484e-12, 6.600e-12, 6.718e-12,
2722 6.785e-12, 6.746e-12, 6.724e-12, 6.764e-12, 6.995e-12,
2723 7.144e-12, 7.320e-12, 7.330e-12, 7.208e-12, 6.789e-12,
2724 6.090e-12, 5.337e-12, 4.620e-12, 4.037e-12, 3.574e-12,
2725 3.311e-12, 3.346e-12, 3.566e-12, 3.836e-12, 4.076e-12,
2726 4.351e-12, 4.691e-12, 5.114e-12, 5.427e-12, 6.167e-12,
2727 7.436e-12, 8.842e-12, 1.038e-11, 1.249e-11, 1.540e-11,
2728 1.915e-11, 2.480e-11, 3.256e-11, 4.339e-11, 5.611e-11,
2729 7.519e-11, 1.037e-10, 1.409e-10, 1.883e-10, 2.503e-10,
2730 3.380e-10, 4.468e-10, 5.801e-10, 7.335e-10, 8.980e-10,
2731 1.110e-09, 1.363e-09, 1.677e-09, 2.104e-09, 2.681e-09,
2732 3.531e-09, 4.621e-09, 6.106e-09, 8.154e-09, 1.046e-08,
2733 1.312e-08, 1.607e-08, 1.948e-08, 2.266e-08, 2.495e-08,
2734 2.655e-08, 2.739e-08, 2.739e-08, 2.662e-08, 2.589e-08,
2735 2.590e-08, 2.664e-08, 2.833e-08, 3.023e-08, 3.305e-08,
2736 3.558e-08, 3.793e-08, 3.961e-08, 4.056e-08, 4.102e-08,
2737 4.025e-08, 3.917e-08, 3.706e-08, 3.493e-08, 3.249e-08,
2738 3.096e-08, 3.011e-08, 3.111e-08, 3.395e-08, 3.958e-08,
2739 4.875e-08, 6.066e-08, 7.915e-08, 1.011e-07, 1.300e-07,
2740 1.622e-07, 2.003e-07, 2.448e-07, 2.863e-07, 3.317e-07,
2741 3.655e-07, 3.960e-07, 4.098e-07, 4.168e-07, 4.198e-07,
2742 4.207e-07, 4.289e-07, 4.384e-07, 4.471e-07, 4.524e-07,
2743 4.574e-07, 4.633e-07, 4.785e-07, 5.028e-07, 5.371e-07,
2744 5.727e-07, 5.955e-07, 5.998e-07, 5.669e-07, 5.082e-07,
2745 4.397e-07, 3.596e-07, 2.814e-07, 2.074e-07, 1.486e-07,
2746 1.057e-07, 7.250e-08, 4.946e-08, 3.430e-08, 2.447e-08,
2747 1.793e-08, 1.375e-08, 1.096e-08, 9.091e-09, 7.709e-09,
2748 6.631e-09, 5.714e-09, 4.886e-09, 4.205e-09, 3.575e-09,
2749 3.070e-09, 2.631e-09, 2.284e-09, 2.002e-09, 1.745e-09,
2750 1.509e-09, 1.284e-09, 1.084e-09, 9.163e-10, 7.663e-10,
2751 6.346e-10, 5.283e-10, 4.354e-10, 3.590e-10, 2.982e-10,
2752 2.455e-10, 2.033e-10, 1.696e-10, 1.432e-10, 1.211e-10,
2753 1.020e-10, 8.702e-11, 7.380e-11, 6.293e-11, 5.343e-11,
2754 4.532e-11, 3.907e-11, 3.365e-11, 2.945e-11, 2.558e-11,
2755 2.192e-11, 1.895e-11, 1.636e-11, 1.420e-11, 1.228e-11,
2756 1.063e-11, 9.348e-12, 8.200e-12, 7.231e-12, 6.430e-12,
2757 5.702e-12, 5.052e-12, 4.469e-12, 4.000e-12, 3.679e-12,
2758 3.387e-12, 3.197e-12, 3.158e-12, 3.327e-12, 3.675e-12,
2759 4.292e-12, 5.437e-12, 7.197e-12, 1.008e-11, 1.437e-11,
2760 2.035e-11, 2.905e-11, 4.062e-11, 5.528e-11, 7.177e-11,
2761 9.064e-11, 1.109e-10, 1.297e-10, 1.473e-10, 1.652e-10,
2762 1.851e-10, 2.079e-10, 2.313e-10, 2.619e-10, 2.958e-10,
2763 3.352e-10, 3.796e-10, 4.295e-10, 4.923e-10, 5.490e-10,
2764 5.998e-10, 6.388e-10, 6.645e-10, 6.712e-10, 6.549e-10,
2765 6.380e-10, 6.255e-10, 6.253e-10, 6.459e-10, 6.977e-10,
2766 7.590e-10, 8.242e-10, 8.920e-10, 9.403e-10, 9.701e-10,
2767 9.483e-10, 9.135e-10, 8.617e-10, 7.921e-10, 7.168e-10,
2768 6.382e-10, 5.677e-10, 5.045e-10, 4.572e-10, 4.312e-10,
2769 4.145e-10, 4.192e-10, 4.541e-10, 5.368e-10, 6.771e-10,
2770 8.962e-10, 1.210e-09, 1.659e-09, 2.330e-09, 3.249e-09,
2771 4.495e-09, 5.923e-09, 7.642e-09, 9.607e-09, 1.178e-08,
2772 1.399e-08, 1.584e-08, 1.730e-08, 1.816e-08, 1.870e-08,
2773 1.868e-08, 1.870e-08, 1.884e-08, 1.990e-08, 2.150e-08,
2774 2.258e-08, 2.364e-08, 2.473e-08, 2.602e-08, 2.689e-08,
2775 2.731e-08, 2.816e-08, 2.859e-08, 2.839e-08, 2.703e-08,
2776 2.451e-08, 2.149e-08, 1.787e-08, 1.449e-08, 1.111e-08,
2777 8.282e-09, 6.121e-09, 4.494e-09, 3.367e-09, 2.487e-09,
2778 1.885e-09, 1.503e-09, 1.249e-09, 1.074e-09, 9.427e-10,
2779 8.439e-10, 7.563e-10, 6.772e-10, 6.002e-10, 5.254e-10,
2780 4.588e-10, 3.977e-10, 3.449e-10, 3.003e-10, 2.624e-10,
2781 2.335e-10, 2.040e-10, 1.771e-10, 1.534e-10, 1.296e-10,
2782 1.097e-10, 9.173e-11, 7.730e-11, 6.547e-11, 5.191e-11,
2783 4.198e-11, 3.361e-11, 2.732e-11, 2.244e-11, 1.791e-11,
2784 1.509e-11, 1.243e-11, 1.035e-11, 8.969e-12, 7.394e-12,
2785 6.323e-12, 5.282e-12, 4.543e-12, 3.752e-12, 3.140e-12,
2786 2.600e-12, 2.194e-12, 1.825e-12, 1.511e-12, 1.245e-12,
2787 1.024e-12, 8.539e-13, 7.227e-13, 6.102e-13, 5.189e-13,
2788 4.430e-13, 3.774e-13, 3.236e-13, 2.800e-13, 2.444e-13,
2789 2.156e-13, 1.932e-13, 1.775e-13, 1.695e-13, 1.672e-13,
2790 1.704e-13, 1.825e-13, 2.087e-13, 2.614e-13, 3.377e-13,
2791 4.817e-13, 6.989e-13, 1.062e-12, 1.562e-12, 2.288e-12,
2792 3.295e-12, 4.550e-12, 5.965e-12, 7.546e-12, 9.395e-12,
2793 1.103e-11, 1.228e-11, 1.318e-11, 1.380e-11, 1.421e-11,
2794 1.390e-11, 1.358e-11, 1.336e-11, 1.342e-11, 1.356e-11,
2795 1.424e-11, 1.552e-11, 1.730e-11, 1.951e-11, 2.128e-11,
2796 2.249e-11, 2.277e-11, 2.226e-11, 2.111e-11, 1.922e-11,
2797 1.775e-11, 1.661e-11, 1.547e-11, 1.446e-11, 1.323e-11,
2798 1.210e-11, 1.054e-11, 9.283e-12, 8.671e-12, 8.670e-12,
2799 9.429e-12, 1.062e-11, 1.255e-11, 1.506e-11, 1.818e-11,
2800 2.260e-11, 2.831e-11, 3.723e-11, 5.092e-11, 6.968e-11,
2801 9.826e-11, 1.349e-10, 1.870e-10, 2.580e-10, 3.430e-10,
2802 4.424e-10, 5.521e-10, 6.812e-10, 8.064e-10, 9.109e-10,
2803 9.839e-10, 1.028e-09, 1.044e-09, 1.029e-09, 1.005e-09,
2804 1.002e-09, 1.038e-09, 1.122e-09, 1.233e-09, 1.372e-09,
2805 1.524e-09, 1.665e-09, 1.804e-09, 1.908e-09, 2.015e-09,
2806 2.117e-09, 2.219e-09, 2.336e-09, 2.531e-09, 2.805e-09,
2807 3.189e-09, 3.617e-09, 4.208e-09, 4.911e-09, 5.619e-09,
2808 6.469e-09, 7.188e-09, 7.957e-09, 8.503e-09, 9.028e-09,
2809 9.571e-09, 9.990e-09, 1.055e-08, 1.102e-08, 1.132e-08,
2810 1.141e-08, 1.145e-08, 1.145e-08, 1.176e-08, 1.224e-08,
2811 1.304e-08, 1.388e-08, 1.445e-08, 1.453e-08, 1.368e-08,
2812 1.220e-08, 1.042e-08, 8.404e-09, 6.403e-09, 4.643e-09,
2813 3.325e-09, 2.335e-09, 1.638e-09, 1.190e-09, 9.161e-10,
2814 7.412e-10, 6.226e-10, 5.516e-10, 5.068e-10, 4.831e-10,
2815 4.856e-10, 5.162e-10, 5.785e-10, 6.539e-10, 7.485e-10,
2816 8.565e-10, 9.534e-10, 1.052e-09, 1.115e-09, 1.173e-09,
2817 1.203e-09, 1.224e-09, 1.243e-09, 1.248e-09, 1.261e-09,
2818 1.265e-09, 1.250e-09, 1.217e-09, 1.176e-09, 1.145e-09,
2819 1.153e-09, 1.199e-09, 1.278e-09, 1.366e-09, 1.426e-09,
2820 1.444e-09, 1.365e-09, 1.224e-09, 1.051e-09, 8.539e-10,
2821 6.564e-10, 4.751e-10, 3.404e-10, 2.377e-10, 1.631e-10,
2822 1.114e-10, 7.870e-11, 5.793e-11, 4.284e-11, 3.300e-11,
2823 2.620e-11, 2.152e-11, 1.777e-11, 1.496e-11, 1.242e-11,
2824 1.037e-11, 8.725e-12, 7.004e-12, 5.718e-12, 4.769e-12,
2825 3.952e-12, 3.336e-12, 2.712e-12, 2.213e-12, 1.803e-12,
2826 1.492e-12, 1.236e-12, 1.006e-12, 8.384e-13, 7.063e-13,
2827 5.879e-13, 4.930e-13, 4.171e-13, 3.569e-13, 3.083e-13,
2828 2.688e-13, 2.333e-13, 2.035e-13, 1.820e-13, 1.682e-13,
2829 1.635e-13, 1.674e-13, 1.769e-13, 2.022e-13, 2.485e-13,
2830 3.127e-13, 4.250e-13, 5.928e-13, 8.514e-13, 1.236e-12,
2831 1.701e-12, 2.392e-12, 3.231e-12, 4.350e-12, 5.559e-12,
2832 6.915e-12, 8.519e-12, 1.013e-11, 1.146e-11, 1.240e-11,
2833 1.305e-11, 1.333e-11, 1.318e-11, 1.263e-11, 1.238e-11,
2834 1.244e-11, 1.305e-11, 1.432e-11, 1.623e-11, 1.846e-11,
2835 2.090e-11, 2.328e-11, 2.526e-11, 2.637e-11, 2.702e-11,
2836 2.794e-11, 2.889e-11, 2.989e-11, 3.231e-11, 3.680e-11,
2837 4.375e-11, 5.504e-11, 7.159e-11, 9.502e-11, 1.279e-10,
2838 1.645e-10, 2.098e-10, 2.618e-10, 3.189e-10, 3.790e-10,
2839 4.303e-10, 4.753e-10, 5.027e-10, 5.221e-10, 5.293e-10,
2840 5.346e-10, 5.467e-10, 5.796e-10, 6.200e-10, 6.454e-10,
2841 6.705e-10, 6.925e-10, 7.233e-10, 7.350e-10, 7.538e-10,
2842 7.861e-10, 8.077e-10, 8.132e-10, 7.749e-10, 7.036e-10,
2843 6.143e-10, 5.093e-10, 4.089e-10, 3.092e-10, 2.299e-10,
2844 1.705e-10, 1.277e-10, 9.723e-11, 7.533e-11, 6.126e-11,
2845 5.154e-11, 4.428e-11, 3.913e-11, 3.521e-11, 3.297e-11,
2846 3.275e-11, 3.460e-11, 3.798e-11, 4.251e-11, 4.745e-11,
2847 5.232e-11, 5.606e-11, 5.820e-11, 5.880e-11, 5.790e-11,
2848 5.661e-11, 5.491e-11, 5.366e-11, 5.341e-11, 5.353e-11,
2849 5.336e-11, 5.293e-11, 5.248e-11, 5.235e-11, 5.208e-11,
2850 5.322e-11, 5.521e-11, 5.725e-11, 5.827e-11, 5.685e-11,
2851 5.245e-11, 4.612e-11, 3.884e-11, 3.129e-11, 2.404e-11,
2852 1.732e-11, 1.223e-11, 8.574e-12, 5.888e-12, 3.986e-12,
2853 2.732e-12, 1.948e-12, 1.414e-12, 1.061e-12, 8.298e-13,
2854 6.612e-13, 5.413e-13, 4.472e-13, 3.772e-13, 3.181e-13,
2855 2.645e-13, 2.171e-13, 1.778e-13, 1.464e-13, 1.183e-13,
2856 9.637e-14, 7.991e-14, 6.668e-14, 5.570e-14, 4.663e-14,
2857 3.848e-14, 3.233e-14, 2.706e-14, 2.284e-14, 1.944e-14,
2858 1.664e-14, 1.430e-14, 1.233e-14, 1.066e-14, 9.234e-15,
2859 8.023e-15, 6.993e-15, 6.119e-15, 5.384e-15, 4.774e-15,
2860 4.283e-15, 3.916e-15, 3.695e-15, 3.682e-15, 4.004e-15,
2861 4.912e-15, 6.853e-15, 1.056e-14, 1.712e-14, 2.804e-14,
2862 4.516e-14, 7.113e-14, 1.084e-13, 1.426e-13, 1.734e-13,
2863 1.978e-13, 2.194e-13, 2.388e-13, 2.489e-13, 2.626e-13,
2864 2.865e-13, 3.105e-13, 3.387e-13, 3.652e-13, 3.984e-13,
2865 4.398e-13, 4.906e-13, 5.550e-13, 6.517e-13, 7.813e-13,
2866 9.272e-13, 1.164e-12, 1.434e-12, 1.849e-12, 2.524e-12,
2867 3.328e-12, 4.523e-12, 6.108e-12, 8.207e-12, 1.122e-11,
2868 1.477e-11, 1.900e-11, 2.412e-11, 2.984e-11, 3.680e-11,
2869 4.353e-11, 4.963e-11, 5.478e-11, 5.903e-11, 6.233e-11,
2870 6.483e-11, 6.904e-11, 7.569e-11, 8.719e-11, 1.048e-10,
2871 1.278e-10, 1.557e-10, 1.869e-10, 2.218e-10, 2.610e-10,
2872 2.975e-10, 3.371e-10, 3.746e-10, 4.065e-10, 4.336e-10,
2873 4.503e-10, 4.701e-10, 4.800e-10, 4.917e-10, 5.038e-10,
2874 5.128e-10, 5.143e-10, 5.071e-10, 5.019e-10, 5.025e-10,
2875 5.183e-10, 5.496e-10, 5.877e-10, 6.235e-10, 6.420e-10,
2876 6.234e-10, 5.698e-10, 4.916e-10, 4.022e-10, 3.126e-10,
2877 2.282e-10, 1.639e-10, 1.142e-10, 7.919e-11, 5.690e-11,
2878 4.313e-11, 3.413e-11, 2.807e-11, 2.410e-11, 2.166e-11,
2879 2.024e-11, 1.946e-11, 1.929e-11, 1.963e-11, 2.035e-11,
2880 2.162e-11, 2.305e-11, 2.493e-11, 2.748e-11, 3.048e-11,
2881 3.413e-11, 3.754e-11, 4.155e-11, 4.635e-11, 5.110e-11,
2882 5.734e-11, 6.338e-11, 6.990e-11, 7.611e-11, 8.125e-11,
2883 8.654e-11, 8.951e-11, 9.182e-11, 9.310e-11, 9.273e-11,
2884 9.094e-11, 8.849e-11, 8.662e-11, 8.670e-11, 8.972e-11,
2885 9.566e-11, 1.025e-10, 1.083e-10, 1.111e-10, 1.074e-10,
2886 9.771e-11, 8.468e-11, 6.958e-11, 5.470e-11, 4.040e-11,
2887 2.940e-11, 2.075e-11, 1.442e-11, 1.010e-11, 7.281e-12,
2888 5.409e-12, 4.138e-12, 3.304e-12, 2.784e-12, 2.473e-12,
2889 2.273e-12, 2.186e-12, 2.118e-12, 2.066e-12, 1.958e-12,
2890 1.818e-12, 1.675e-12, 1.509e-12, 1.349e-12, 1.171e-12,
2891 9.838e-13, 8.213e-13, 6.765e-13, 5.378e-13, 4.161e-13,
2892 3.119e-13, 2.279e-13, 1.637e-13, 1.152e-13, 8.112e-14,
2893 5.919e-14, 4.470e-14, 3.492e-14, 2.811e-14, 2.319e-14,
2894 1.948e-14, 1.660e-14, 1.432e-14, 1.251e-14, 1.109e-14,
2895 1.006e-14, 9.450e-15, 9.384e-15, 1.012e-14, 1.216e-14,
2896 1.636e-14, 2.305e-14, 3.488e-14, 5.572e-14, 8.479e-14,
2897 1.265e-13, 1.905e-13, 2.730e-13, 3.809e-13, 4.955e-13,
2898 6.303e-13, 7.861e-13, 9.427e-13, 1.097e-12, 1.212e-12,
2899 1.328e-12, 1.415e-12, 1.463e-12, 1.495e-12, 1.571e-12,
2900 1.731e-12, 1.981e-12, 2.387e-12, 2.930e-12, 3.642e-12,
2901 4.584e-12, 5.822e-12, 7.278e-12, 9.193e-12, 1.135e-11,
2902 1.382e-11, 1.662e-11, 1.958e-11, 2.286e-11, 2.559e-11,
2903 2.805e-11, 2.988e-11, 3.106e-11, 3.182e-11, 3.200e-11,
2904 3.258e-11, 3.362e-11, 3.558e-11, 3.688e-11, 3.800e-11,
2905 3.929e-11, 4.062e-11, 4.186e-11, 4.293e-11, 4.480e-11,
2906 4.643e-11, 4.704e-11, 4.571e-11, 4.206e-11, 3.715e-11,
2907 3.131e-11, 2.541e-11, 1.978e-11, 1.508e-11, 1.146e-11,
2908 8.700e-12, 6.603e-12, 5.162e-12, 4.157e-12, 3.408e-12,
2909 2.829e-12, 2.405e-12, 2.071e-12, 1.826e-12, 1.648e-12,
2910 1.542e-12, 1.489e-12, 1.485e-12, 1.493e-12, 1.545e-12,
2911 1.637e-12, 1.814e-12, 2.061e-12, 2.312e-12, 2.651e-12,
2912 3.030e-12, 3.460e-12, 3.901e-12, 4.306e-12, 4.721e-12,
2913 5.008e-12, 5.281e-12, 5.541e-12, 5.791e-12, 6.115e-12,
2914 6.442e-12, 6.680e-12, 6.791e-12, 6.831e-12, 6.839e-12,
2915 6.946e-12, 7.128e-12, 7.537e-12, 8.036e-12, 8.392e-12,
2916 8.526e-12, 8.110e-12, 7.325e-12, 6.329e-12, 5.183e-12,
2917 4.081e-12, 2.985e-12, 2.141e-12, 1.492e-12, 1.015e-12,
2918 6.684e-13, 4.414e-13, 2.987e-13, 2.038e-13, 1.391e-13,
2919 9.860e-14, 7.240e-14, 5.493e-14, 4.288e-14, 3.427e-14,
2920 2.787e-14, 2.296e-14, 1.909e-14, 1.598e-14, 1.344e-14,
2921 1.135e-14, 9.616e-15, 8.169e-15, 6.957e-15, 5.938e-15,
2922 5.080e-15, 4.353e-15, 3.738e-15, 3.217e-15, 2.773e-15,
2923 2.397e-15, 2.077e-15, 1.805e-15, 1.575e-15, 1.382e-15,
2924 1.221e-15, 1.090e-15, 9.855e-16, 9.068e-16, 8.537e-16,
2925 8.270e-16, 8.290e-16, 8.634e-16, 9.359e-16, 1.055e-15,
2926 1.233e-15, 1.486e-15, 1.839e-15, 2.326e-15, 2.998e-15,
2927 3.934e-15, 5.256e-15, 7.164e-15, 9.984e-15, 1.427e-14,
2928 2.099e-14, 3.196e-14, 5.121e-14, 7.908e-14, 1.131e-13,
2929 1.602e-13, 2.239e-13, 3.075e-13, 4.134e-13, 5.749e-13,
2930 7.886e-13, 1.071e-12, 1.464e-12, 2.032e-12, 2.800e-12,
2931 3.732e-12, 4.996e-12, 6.483e-12, 8.143e-12, 1.006e-11,
2932 1.238e-11, 1.484e-11, 1.744e-11, 2.020e-11, 2.274e-11,
2933 2.562e-11, 2.848e-11, 3.191e-11, 3.617e-11, 4.081e-11,
2934 4.577e-11, 4.937e-11, 5.204e-11, 5.401e-11, 5.462e-11,
2935 5.507e-11, 5.510e-11, 5.605e-11, 5.686e-11, 5.739e-11,
2936 5.766e-11, 5.740e-11, 5.754e-11, 5.761e-11, 5.777e-11,
2937 5.712e-11, 5.510e-11, 5.088e-11, 4.438e-11, 3.728e-11,
2938 2.994e-11, 2.305e-11, 1.715e-11, 1.256e-11, 9.208e-12,
2939 6.745e-12, 5.014e-12, 3.785e-12, 2.900e-12, 2.239e-12,
2940 1.757e-12, 1.414e-12, 1.142e-12, 9.482e-13, 8.010e-13,
2941 6.961e-13, 6.253e-13, 5.735e-13, 5.433e-13, 5.352e-13,
2942 5.493e-13, 5.706e-13, 6.068e-13, 6.531e-13, 7.109e-13,
2943 7.767e-13, 8.590e-13, 9.792e-13, 1.142e-12, 1.371e-12,
2944 1.650e-12, 1.957e-12, 2.302e-12, 2.705e-12, 3.145e-12,
2945 3.608e-12, 4.071e-12, 4.602e-12, 5.133e-12, 5.572e-12,
2946 5.987e-12, 6.248e-12, 6.533e-12, 6.757e-12, 6.935e-12,
2947 7.224e-12, 7.422e-12, 7.538e-12, 7.547e-12, 7.495e-12,
2948 7.543e-12, 7.725e-12, 8.139e-12, 8.627e-12, 9.146e-12,
2949 9.443e-12, 9.318e-12, 8.649e-12, 7.512e-12, 6.261e-12,
2950 4.915e-12, 3.647e-12, 2.597e-12, 1.785e-12, 1.242e-12,
2951 8.660e-13, 6.207e-13, 4.610e-13, 3.444e-13, 2.634e-13,
2952 2.100e-13, 1.725e-13, 1.455e-13, 1.237e-13, 1.085e-13,
2953 9.513e-14, 7.978e-14, 6.603e-14, 5.288e-14, 4.084e-14,
2954 2.952e-14, 2.157e-14, 1.593e-14, 1.199e-14, 9.267e-15,
2955 7.365e-15, 6.004e-15, 4.995e-15, 4.218e-15, 3.601e-15,
2956 3.101e-15, 2.692e-15, 2.360e-15, 2.094e-15, 1.891e-15,
2957 1.755e-15, 1.699e-15, 1.755e-15, 1.987e-15, 2.506e-15,
2958 3.506e-15, 5.289e-15, 8.311e-15, 1.325e-14, 2.129e-14,
2959 3.237e-14, 4.595e-14, 6.441e-14, 8.433e-14, 1.074e-13,
2960 1.383e-13, 1.762e-13, 2.281e-13, 2.831e-13, 3.523e-13,
2961 4.380e-13, 5.304e-13, 6.290e-13, 7.142e-13, 8.032e-13,
2962 8.934e-13, 9.888e-13, 1.109e-12, 1.261e-12, 1.462e-12,
2963 1.740e-12, 2.099e-12, 2.535e-12, 3.008e-12, 3.462e-12,
2964 3.856e-12, 4.098e-12, 4.239e-12, 4.234e-12, 4.132e-12,
2965 3.986e-12, 3.866e-12, 3.829e-12, 3.742e-12, 3.705e-12,
2966 3.694e-12, 3.765e-12, 3.849e-12, 3.929e-12, 4.056e-12,
2967 4.092e-12, 4.047e-12, 3.792e-12, 3.407e-12, 2.953e-12,
2968 2.429e-12, 1.931e-12, 1.460e-12, 1.099e-12, 8.199e-13,
2969 6.077e-13, 4.449e-13, 3.359e-13, 2.524e-13, 1.881e-13,
2970 1.391e-13, 1.020e-13, 7.544e-14, 5.555e-14, 4.220e-14,
2971 3.321e-14, 2.686e-14, 2.212e-14, 1.780e-14, 1.369e-14,
2972 1.094e-14, 9.130e-15, 8.101e-15, 7.828e-15, 8.393e-15,
2973 1.012e-14, 1.259e-14, 1.538e-14, 1.961e-14, 2.619e-14,
2974 3.679e-14, 5.049e-14, 6.917e-14, 8.880e-14, 1.115e-13,
2975 1.373e-13, 1.619e-13, 1.878e-13, 2.111e-13, 2.330e-13,
2976 2.503e-13, 2.613e-13, 2.743e-13, 2.826e-13, 2.976e-13,
2977 3.162e-13, 3.360e-13, 3.491e-13, 3.541e-13, 3.595e-13,
2978 3.608e-13, 3.709e-13, 3.869e-13, 4.120e-13, 4.366e-13,
2979 4.504e-13, 4.379e-13, 3.955e-13, 3.385e-13, 2.741e-13,
2980 2.089e-13, 1.427e-13, 9.294e-14, 5.775e-14, 3.565e-14,
2981 2.210e-14, 1.398e-14, 9.194e-15, 6.363e-15, 4.644e-15,
2982 3.550e-15, 2.808e-15, 2.274e-15, 1.871e-15, 1.557e-15,
2983 1.308e-15, 1.108e-15, 9.488e-16, 8.222e-16, 7.238e-16,
2984 6.506e-16, 6.008e-16, 5.742e-16, 5.724e-16, 5.991e-16,
2985 6.625e-16, 7.775e-16, 9.734e-16, 1.306e-15, 1.880e-15,
2986 2.879e-15, 4.616e-15, 7.579e-15, 1.248e-14, 2.030e-14,
2987 3.244e-14, 5.171e-14, 7.394e-14, 9.676e-14, 1.199e-13,
2988 1.467e-13, 1.737e-13, 2.020e-13, 2.425e-13, 3.016e-13,
2989 3.700e-13, 4.617e-13, 5.949e-13, 7.473e-13, 9.378e-13,
2990 1.191e-12, 1.481e-12, 1.813e-12, 2.232e-12, 2.722e-12,
2991 3.254e-12, 3.845e-12, 4.458e-12, 5.048e-12, 5.511e-12,
2992 5.898e-12, 6.204e-12, 6.293e-12, 6.386e-12, 6.467e-12,
2993 6.507e-12, 6.466e-12, 6.443e-12, 6.598e-12, 6.873e-12,
2994 7.300e-12, 7.816e-12, 8.368e-12, 8.643e-12, 8.466e-12,
2995 7.871e-12, 6.853e-12, 5.714e-12, 4.482e-12, 3.392e-12,
2996 2.613e-12, 2.008e-12, 1.562e-12, 1.228e-12, 9.888e-13,
2997 7.646e-13, 5.769e-13, 4.368e-13, 3.324e-13, 2.508e-13,
2998 1.916e-13};
2999
3000/*
3001 --------------------------- CKD_MT_3.20 -------------------------
3002
3003 29 October 2018
3004
3005 Release Notes for MT_CKD_3.20
3006
3007 Prepared by S. A. Clough,
3008 AER Inc.,
3009 131 Harwell Avenue
3010 Lexington, MA 02421
3011 clough@aer.com
3012
3013 The continuum was updated to MT_CKD_3.2, which has new self continnum
3014 coefficients in window regions for wavenumbers greater than 2000 cm-1
3015 and updated self continuum temperature dependence from 1800-3500 cm-1
3016 (E.J. Mlawer, M.J. Alvarado, K.E. Cady-Pereira)
3017
3018 The continuum has been updated to MT_CKD v3.0, which included modifications
3019 to the H2O foreign continuum from 0-600 cm-1 and the self continuum in the
3020 microwave that resulted from an analysis of measurements taken at the ARM
3021 RHUBC-II campaign and a re-analysis of RHUBC-I measurements. (E.J. Mlawer,
3022 D.D. Turner, S.N. Paine, V.H. Payne)
3023
3024 further information can be found under
3025 http://www.rtweb.aer.com/continuum_frame.html
3026
3027 Transformation from original F77 code to C/C++ by
3028 E. Turner, Met Office UK, 29 October 2018
3029
3030 --------------------------- CKD_MT_3.20 -------------------------
3031 */
3032
3033// H2O self continuum parameters at T=296 K
3034// date of last update: 10/29/18
3035// units of (CM**3/MOL)*1.E-20
3036const Numeric SL296_ckd_mt_320_v1 = -20.0;
3037const Numeric SL296_ckd_mt_320_v2 = 20000.0;
3038const Numeric SL296_ckd_mt_320_dv = 10.0;
3039const int SL296_ckd_mt_320_npt = 2003;
3040const double SL296_ckd_mt_320[SL296_ckd_mt_320_npt+addF77fields] = {
3041 0.000e0, 1.720e-01, 1.695e-01,
3042 1.700e-01, 1.695e-01, 1.720e-01, 1.680e-01, 1.687e-01,
3043 1.624e-01, 1.606e-01, 1.508e-01, 1.447e-01, 1.344e-01,
3044 1.214e-01, 1.133e-01, 1.009e-01, 9.217e-02, 8.297e-02,
3045 6.989e-02, 6.513e-02, 5.469e-02, 5.056e-02, 4.417e-02,
3046 3.779e-02, 3.484e-02, 2.994e-02, 2.720e-02, 2.325e-02,
3047 2.063e-02, 1.818e-02, 1.592e-02, 1.405e-02, 1.251e-02,
3048 1.080e-02, 9.647e-03, 8.424e-03, 7.519e-03, 6.555e-03,
3049 5.880e-03, 5.136e-03, 4.511e-03, 3.989e-03, 3.509e-03,
3050 3.114e-03, 2.740e-03, 2.446e-03, 2.144e-03, 1.895e-03,
3051 1.676e-03, 1.486e-03, 1.312e-03, 1.164e-03, 1.031e-03,
3052 9.129e-04, 8.106e-04, 7.213e-04, 6.400e-04, 5.687e-04,
3053 5.063e-04, 4.511e-04, 4.029e-04, 3.596e-04, 3.220e-04,
3054 2.889e-04, 2.597e-04, 2.337e-04, 2.108e-04, 1.907e-04,
3055 1.728e-04, 1.570e-04, 1.430e-04, 1.305e-04, 1.195e-04,
3056 1.097e-04, 1.009e-04, 9.307e-05, 8.604e-05, 7.971e-05,
3057 7.407e-05, 6.896e-05, 6.433e-05, 6.013e-05, 5.631e-05,
3058 5.283e-05, 4.963e-05, 4.669e-05, 4.398e-05, 4.148e-05,
3059 3.917e-05, 3.702e-05, 3.502e-05, 3.316e-05, 3.142e-05,
3060 2.978e-05, 2.825e-05, 2.681e-05, 2.546e-05, 2.419e-05,
3061 2.299e-05, 2.186e-05, 2.079e-05, 1.979e-05, 1.884e-05,
3062 1.795e-05, 1.711e-05, 1.633e-05, 1.559e-05, 1.490e-05,
3063 1.426e-05, 1.367e-05, 1.312e-05, 1.263e-05, 1.218e-05,
3064 1.178e-05, 1.143e-05, 1.112e-05, 1.088e-05, 1.070e-05,
3065 1.057e-05, 1.050e-05, 1.051e-05, 1.059e-05, 1.076e-05,
3066 1.100e-05, 1.133e-05, 1.180e-05, 1.237e-05, 1.308e-05,
3067 1.393e-05, 1.483e-05, 1.614e-05, 1.758e-05, 1.930e-05,
3068 2.123e-05, 2.346e-05, 2.647e-05, 2.930e-05, 3.279e-05,
3069 3.745e-05, 4.152e-05, 4.813e-05, 5.477e-05, 6.203e-05,
3070 7.331e-05, 8.056e-05, 9.882e-05, 1.050e-04, 1.210e-04,
3071 1.341e-04, 1.572e-04, 1.698e-04, 1.968e-04, 2.175e-04,
3072 2.431e-04, 2.735e-04, 2.867e-04, 3.190e-04, 3.371e-04,
3073 3.554e-04, 3.726e-04, 3.837e-04, 3.878e-04, 3.864e-04,
3074 3.858e-04, 3.841e-04, 3.852e-04, 3.815e-04, 3.762e-04,
3075 3.618e-04, 3.579e-04, 3.450e-04, 3.202e-04, 3.018e-04,
3076 2.785e-04, 2.602e-04, 2.416e-04, 2.097e-04, 1.939e-04,
3077 1.689e-04, 1.498e-04, 1.308e-04, 1.170e-04, 1.011e-04,
3078 9.237e-05, 7.909e-05, 7.006e-05, 6.112e-05, 5.401e-05,
3079 4.914e-05, 4.266e-05, 3.963e-05, 3.316e-05, 3.037e-05,
3080 2.598e-05, 2.294e-05, 2.066e-05, 1.813e-05, 1.583e-05,
3081 1.423e-05, 1.247e-05, 1.116e-05, 9.760e-06, 8.596e-06,
3082 7.720E-06, 7.091E-06, 6.499E-06, 5.801E-06, 5.150E-06, // section diff to MT_1.0
3083 4.500E-06, 4.000E-06, 3.509E-06, 3.100E-06, 2.714E-06,
3084 2.406E-06, 2.108E-06, 1.875E-06, 1.669E-06, 1.555E-06,
3085 1.444E-06, 1.345E-06, 1.257E-06, 1.175E-06, 1.102E-06,
3086 1.035E-06, 9.745E-07, 9.194E-07, 8.685E-07, 8.222E-07,
3087 7.798E-07, 7.412E-07, 7.052E-07, 6.724E-07, 6.420E-07,
3088 6.143E-07, 5.886E-07, 5.649E-07, 5.430E-07, 5.228E-07,
3089 5.041E-07, 4.868E-07, 4.708E-07, 4.559E-07, 4.421E-07,
3090 4.293E-07, 4.174E-07, 4.064E-07, 3.961E-07, 3.865E-07,
3091 3.775E-07, 3.692E-07, 3.614E-07, 3.542E-07, 3.474E-07,
3092 3.411E-07, 3.353E-07, 3.298E-07, 3.248E-07, 3.201E-07,
3093 3.158E-07, 3.119E-07, 3.084E-07, 3.053E-07, 3.025E-07,
3094 3.003E-07, 2.988E-07, 2.976E-07, 2.977E-07, 2.989E-07,
3095 3.015E-07, 3.057E-07, 3.112E-07, 3.161E-07, 3.186E-07,
3096 3.176E-07, 3.142E-07, 3.099E-07, 3.065E-07, 3.011E-07,
3097 2.955E-07, 2.914E-07, 2.884E-07, 2.864E-07, 2.858E-07,
3098 2.851E-07, 2.857E-07, 2.870E-07, 2.888E-07, 2.914E-07,
3099 2.948E-07, 2.990E-07, 3.042E-07, 3.105E-07, 3.185E-07,
3100 3.276E-07, 3.385E-07, 3.511E-07, 3.646E-07, 3.858E-07,
3101 4.081E-07, 4.335E-07, 4.643E-07, 5.011E-07, 5.494E-07,
3102 5.953E-07, 6.354E-07, 7.116E-07, 7.498E-07, 8.613E-07,
3103 9.350E-07, 1.002E-06, 1.090E-06, 1.174E-06, 1.230E-06,
3104 1.288E-06, 1.334E-06, 1.383E-06, 1.380E-06, 1.390E-06,
3105 1.373E-06, 1.354E-06, 1.335E-06, 1.343E-06, 1.323E-06,
3106 1.349E-06, 1.353E-06, 1.362E-06, 1.344E-06, 1.329E-06,
3107 1.336E-06, 1.327E-06, 1.325E-06, 1.359E-06, 1.374E-06,
3108 1.415E-06, 1.462E-06, 1.526E-06, 1.619E-06, 1.735E-06,
3109 1.863E-06, 2.034E-06, 2.265E-06, 2.482E-06, 2.756E-06,
3110 3.103E-06, 3.466E-06, 3.832E-06, 4.378E-06, 4.913E-06,
3111 5.651E-06, 6.311E-06, 7.169E-06, 8.057E-06, 9.253E-06,
3112 1.047E-05, 1.212E-05, 1.360E-05, 1.569E-05, 1.776E-05,
3113 2.020E-05, 2.281E-05, 2.683E-05, 2.994E-05, 3.488E-05,
3114 3.896E-05, 4.499E-05, 5.175E-05, 6.035E-05, 6.340E-05,
3115 7.281E-05, 7.923E-05, 8.348E-05, 9.631E-05, 1.044E-04,
3116 1.102E-04, 1.176E-04, 1.244E-04, 1.283E-04, 1.326E-04,
3117 1.400E-04, 1.395E-04, 1.387E-04, 1.363E-04, 1.314E-04,
3118 1.241E-04, 1.228E-04, 1.148E-04, 1.086E-04, 1.018E-04,
3119 8.890E-05, 8.316E-05, 7.292E-05, 6.452E-05, 5.625E-05,
3120 5.045E-05, 4.380E-05, 3.762E-05, 3.290E-05, 2.836E-05,
3121 2.485E-05, 2.168E-05, 1.895E-05, 1.659E-05, 1.453E-05,
3122 1.282E-05, 1.132E-05, 1.001E-05, 8.836E-06, 7.804E-06,
3123 6.922E-06, 6.116E-06, 5.429E-06, 4.824E-06, 4.278E-06,
3124 3.788E-06, 3.371E-06, 2.985E-06, 2.649E-06, 2.357E-06,
3125 2.090E-06, 1.858E-06, 1.647E-06, 1.462E-06, 1.299E-06,
3126 1.155E-06, 1.028E-06, 9.142E-07, 8.132E-07, 7.246E-07,
3127 6.418E-07, 5.726E-07, 5.221E-07, 4.890E-07, 4.666E-07,
3128 4.443E-07, 4.203E-07, 3.978E-07, 3.770E-07, 3.575E-07,
3129 3.395E-07, 3.227E-07, 3.070E-07, 2.924E-07, 2.788E-07,
3130 2.661E-07, 2.543E-07, 2.433E-07, 2.329E-07, 2.233E-07,
3131 2.143E-07, 2.058E-07, 1.980E-07, 1.906E-07, 1.837E-07,
3132 1.773E-07, 1.713E-07, 1.657E-07, 1.605E-07, 1.557E-07,
3133 1.514E-07, 1.472E-07, 1.435E-07, 1.404E-07, 1.377E-07,
3134 1.354E-07, 1.332E-07, 1.308E-07, 1.282E-07, 1.256E-07,
3135 1.227E-07, 1.192E-07, 1.159E-07, 1.134E-07, 1.114E-07,
3136 1.098E-07, 1.081E-07, 1.066E-07, 1.055E-07, 1.045E-07,
3137 1.036E-07, 1.030E-07, 1.026E-07, 1.025E-07, 1.025E-07,
3138 1.028E-07, 1.033E-07, 1.041E-07, 1.049E-07, 1.060E-07,
3139 1.075E-07, 1.093E-07, 1.114E-07, 1.139E-07, 1.166E-07,
3140 1.199E-07, 1.239E-07, 1.282E-07, 1.316E-07, 1.355E-07,
3141 1.436E-07, 1.588E-07, 1.807E-07, 2.060E-07, 2.337E-07,
3142 2.645E-07, 2.996E-07, 3.393E-07, 3.843E-07, 4.363E-07,
3143 4.935E-07, 5.607E-07, 6.363E-07, 7.242E-07, 8.230E-07,
3144 9.411E-07, 1.071E-06, 1.232E-06, 1.402E-06, 1.600E-06,
3145 1.820E-06, 2.128E-06, 2.386E-06, 2.781E-06, 3.242E-06,
3146 3.653E-06, 4.323E-06, 4.747E-06, 5.321E-06, 5.919E-06,
3147 6.681E-06, 7.101E-06, 7.983E-06, 8.342E-06, 8.741E-06,
3148 9.431E-06, 9.952E-06, 1.026E-05, 1.055E-05, 1.095E-05,
3149 1.095E-05, 1.087E-05, 1.056E-05, 1.026E-05, 9.715E-06,
3150 9.252E-06, 8.452E-06, 7.958E-06, 7.268E-06, 6.295E-06,
3151 6.003E-06, 5.000E-06, 4.591E-06, 3.983E-06, 3.479E-06,
3152 3.058E-06, 2.667E-06, 2.293E-06, 1.995E-06, 1.747E-06,
3153 1.517E-06, 1.335E-06, 1.165E-06, 1.028E-06, 9.007E-07,
3154 7.956E-07, 7.015E-07, 6.192E-07, 5.491E-07, 4.859E-07,
3155 4.297E-07, 3.799E-07, 3.380E-07, 3.002E-07, 2.659E-07,
3156 2.366E-07, 2.103E-07, 1.861E-07, 1.655E-07, 1.469E-07,
3157 1.309E-07, 1.162E-07, 1.032E-07, 9.198E-08, 8.181E-08,
3158 7.294E-08, 6.516E-08, 5.787E-08, 5.163E-08, 4.612E-08,
3159 4.096E-08, 3.654E-08, 3.299E-08, 3.052E-08, 2.856E-08,
3160 2.683E-08, 2.507E-08, 2.346E-08, 2.194E-08, 2.053E-08,
3161 1.921E-08, 1.799E-08, 1.686E-08, 1.580E-08, 1.481E-08,
3162 1.389E-08, 1.304E-08, 1.226E-08, 1.151E-08, 1.083E-08,
3163 1.020E-08, 9.618E-09, 9.080E-09, 8.575E-09, 8.080E-09,
3164 7.624E-09, 7.176E-09, 6.761E-09, 6.370E-09, 6.004E-09,
3165 5.672E-09, 5.371E-09, 5.097E-09, 4.845E-09, 4.608E-09,
3166 4.390E-09, 4.192E-09, 4.011E-09, 3.846E-09, 3.698E-09,
3167 3.568E-09, 3.450E-09, 3.351E-09, 3.268E-09, 3.195E-09,
3168 3.131E-09, 3.091E-09, 3.060E-09, 3.039E-09, 3.034E-09,
3169 3.045E-09, 3.072E-09, 3.116E-09, 3.176E-09, 3.253E-09,
3170 3.347E-09, 3.467E-09, 3.605E-09, 3.763E-09, 3.946E-09,
3171 4.162E-09, 4.399E-09, 4.677E-09, 4.983E-09, 5.336E-09,
3172 5.728E-09, 6.168E-09, 6.684E-09, 7.214E-09, 7.861E-09,
3173 8.620E-09, 9.481E-09, 1.032E-08, 1.135E-08, 1.264E-08,
3174 1.396E-08, 1.567E-08, 1.740E-08, 1.977E-08, 2.200E-08,
3175 2.563E-08, 2.935E-08, 3.386E-08, 3.993E-08, 4.828E-08,
3176 5.714E-08, 6.877E-08, 8.135E-08, 9.779E-08, 1.132E-07,
3177 1.344E-07, 1.544E-07, 1.820E-07, 2.207E-07, 2.509E-07,
3178 2.854E-07, 3.026E-07, 3.278E-07, 3.474E-07, 3.693E-07,
3179 3.930E-07, 4.104E-07, 4.220E-07, 4.439E-07, 4.545E-07,
3180 4.778E-07, 4.812E-07, 5.018E-07, 4.899E-07, 5.075E-07,
3181 5.073E-07, 5.171E-07, 5.131E-07, 5.250E-07, 5.617E-07,
3182 5.846E-07, 6.239E-07, 6.696E-07, 7.398E-07, 8.073E-07,
3183 9.150E-07, 1.009E-06, 1.116E-06, 1.264E-06, 1.439E-06,
3184 1.644E-06, 1.856E-06, 2.147E-06, 2.317E-06, 2.713E-06,
3185 2.882E-06, 2.990E-06, 3.489E-06, 3.581E-06, 4.033E-06,
3186 4.260E-06, 4.543E-06, 4.840E-06, 4.826E-06, 5.013E-06,
3187 5.252E-06, 5.277E-06, 5.306E-06, 5.234E-06, 5.111E-06,
3188 5.134E-06, 4.748E-06, 4.434E-06, 4.109E-06, 3.605E-06,
3189 3.252E-06, 2.731E-06, 2.369E-06, 1.922E-06, 1.558E-06,
3190 1.321E-06, 1.058E-06, 8.515E-07, 6.811E-07, 5.431E-07,
3191 4.348E-07, 3.510E-07, 2.853E-07, 2.344E-07, 1.949E-07,
3192 1.649E-07, 1.409E-07, 1.232E-07, 1.098E-07, 9.866E-08,
3193 8.899E-08, 8.135E-08, 7.409E-08, 6.809E-08, 6.237E-08,
3194 5.728E-08, 5.267E-08, 4.865E-08, 4.482E-08, 4.169E-08,
3195 3.841E-08, 3.573E-08, 3.304E-08, 3.065E-08, 2.851E-08,
3196 2.634E-08, 2.448E-08, 2.275E-08, 2.114E-08, 1.965E-08,
3197 1.830E-08, 1.707E-08, 1.591E-08, 1.484E-08, 1.386E-08,
3198 1.294E-08, 1.209E-08, 1.131E-08, 1.056E-08, 9.901E-09,
3199 9.263E-09, 8.680E-09, 8.137E-09, 7.627E-09, 7.158E-09,
3200 6.715E-09, 6.305E-09, 5.927E-09, 5.568E-09, 5.242E-09,
3201 4.935E-09, 4.648E-09, 4.383E-09, 4.137E-09, 3.909E-09,
3202 3.697E-09, 3.500E-09, 3.321E-09, 3.156E-09, 3.006E-09,
3203 2.868E-09, 2.745E-09, 2.638E-09, 2.545E-09, 2.469E-09,
3204 2.405E-09, 2.369E-09, 2.344E-09, 2.350E-09, 2.371E-09,
3205 2.491E-09, 2.535E-09, 2.730E-09, 3.067E-09, 3.322E-09,
3206 3.630E-09, 4.045E-09, 4.524E-09, 4.981E-09, 5.613E-09,
3207 6.051E-09, 6.538E-09, 6.892E-09, 7.601E-09, 8.194E-09,
3208 8.806E-09, 9.450E-09, 9.745E-09, 1.009E-08, 1.017E-08,
3209 1.039E-08, 1.061E-08, 1.076E-08, 1.086E-08, 1.111E-08,
3210 1.142E-08, 1.160E-08, 1.174E-08, 1.180E-08, 1.187E-08,
3211 1.194E-08, 1.192E-08, 1.224E-08, 1.245E-08, 1.246E-08,
3212 1.318E-08, 1.377E-08, 1.471E-08, 1.582E-08, 1.713E-08,
3213 1.853E-08, 2.063E-08, 2.270E-08, 2.567E-08, 2.891E-08,
3214 3.264E-08, 3.744E-08, 4.286E-08, 4.915E-08, 5.623E-08,
3215 6.336E-08, 7.293E-08, 8.309E-08, 9.319E-08, 1.091E-07,
3216 1.243E-07, 1.348E-07, 1.449E-07, 1.620E-07, 1.846E-07,
3217 1.937E-07, 2.040E-07, 2.179E-07, 2.298E-07, 2.433E-07,
3218 2.439E-07, 2.464E-07, 2.611E-07, 2.617E-07, 2.582E-07,
3219 2.453E-07, 2.401E-07, 2.349E-07, 2.203E-07, 2.066E-07,
3220 1.939E-07, 1.780E-07, 1.558E-07, 1.391E-07, 1.203E-07,
3221 1.048E-07, 9.464E-08, 8.306E-08, 7.239E-08, 6.317E-08,
3222 5.520E-08, 4.847E-08, 4.282E-08, 3.796E-08, 3.377E-08,
3223 2.996E-08, 2.678E-08, 2.400E-08, 2.134E-08, 1.904E-08,
3224 1.705E-08, 1.523E-08, 1.350E-08, 1.204E-08, 1.070E-08,
3225 9.408E-09, 8.476E-09, 7.470E-09, 6.679E-09, 5.929E-09,
3226 5.267E-09, 4.711E-09, 4.172E-09, 3.761E-09, 3.288E-09,
3227 2.929E-09, 2.609E-09, 2.315E-09, 2.042E-09, 1.844E-09,
3228 1.640E-09, 1.470E-09, 1.310E-09, 1.176E-09, 1.049E-09,
3229 9.377E-10, 8.462E-10, 7.616E-10, 6.818E-10, 6.119E-10,
3230 5.558E-10, 5.152E-10, 4.832E-10, 4.546E-10, 4.267E-10,
3231 4.009E-10, 3.770E-10, 3.546E-10, 3.340E-10, 3.149E-10,
3232 2.971E-10, 2.805E-10, 2.652E-10, 2.509E-10, 2.377E-10,
3233 2.255E-10, 2.142E-10, 2.038E-10, 1.943E-10, 1.855E-10,
3234 1.776E-10, 1.703E-10, 1.640E-10, 1.586E-10, 1.536E-10,
3235 1.494E-10, 1.466E-10, 1.446E-10, 1.440E-10, 1.439E-10,
3236 1.455E-10, 1.461E-10, 1.479E-10, 1.514E-10, 1.538E-10,
3237 1.590E-10, 1.652E-10, 1.750E-10, 1.811E-10, 1.880E-10,
3238 1.933E-10, 2.027E-10, 2.078E-10, 2.170E-10, 2.249E-10,
3239 2.323E-10, 2.408E-10, 2.461E-10, 2.536E-10, 2.581E-10,
3240 2.615E-10, 2.721E-10, 2.782E-10, 2.866E-10, 2.938E-10,
3241 2.958E-10, 3.011E-10, 3.155E-10, 3.237E-10, 3.589E-10,
3242 3.838E-10, 4.083E-10, 4.354E-10, 4.745E-10, 5.148E-10,
3243 5.648E-10, 6.194E-10, 6.748E-10, 7.566E-10, 8.421E-10,
3244 9.427E-10, 1.042E-09, 1.165E-09, 1.341E-09, 1.518E-09,
3245 1.686E-09, 2.036E-09, 2.362E-09, 2.811E-09, 3.296E-09,
3246 4.070E-09, 4.695E-09, 6.152E-09, 7.572E-09, 9.557E-09,
3247 1.135E-08, 1.279E-08, 1.364E-08, 1.436E-08, 1.540E-08,
3248 1.672E-08, 1.793E-08, 1.906E-08, 2.036E-08, 2.144E-08,
3249 2.292E-08, 2.371E-08, 2.493E-08, 2.606E-08, 2.706E-08,
3250 2.866E-08, 3.036E-08, 3.136E-08, 3.405E-08, 3.665E-08,
3251 3.837E-08, 4.229E-08, 4.748E-08, 5.320E-08, 5.763E-08,
3252 6.677E-08, 7.216E-08, 7.716E-08, 8.958E-08, 9.419E-08,
3253 1.036E-07, 1.108E-07, 1.189E-07, 1.246E-07, 1.348E-07,
3254 1.310E-07, 1.361E-07, 1.364E-07, 1.363E-07, 1.343E-07,
3255 1.293E-07, 1.254E-07, 1.235E-07, 1.158E-07, 1.107E-07,
3256 9.961E-08, 9.011E-08, 7.910E-08, 6.916E-08, 6.338E-08,
3257 5.564E-08, 4.827E-08, 4.198E-08, 3.695E-08, 3.276E-08,
3258 2.929E-08, 2.633E-08, 2.391E-08, 2.192E-08, 2.021E-08,
3259 1.890E-08, 1.772E-08, 1.667E-08, 1.603E-08, 1.547E-08,
3260 1.537E-08, 1.492E-08, 1.515E-08, 1.479E-08, 1.450E-08,
3261 1.513E-08, 1.495E-08, 1.529E-08, 1.565E-08, 1.564E-08,
3262 1.553E-08, 1.569E-08, 1.584E-08, 1.570E-08, 1.538E-08,
3263 1.531E-08, 1.346E-08, 1.199E-08, 1.044E-08, 8.892E-09,
3264 7.076E-09, 5.884E-09, 5.039E-09, 4.129E-09, 3.663E-09,
3265 2.993E-09, 2.622E-09, 2.232E-09, 1.884E-09, 1.569E-09,
3266 1.348E-09, 1.144E-09, 1.009E-09, 8.833E-10, 7.907E-10,
3267 7.079E-10, 6.514E-10, 5.823E-10, 5.312E-10, 4.883E-10,
3268 4.458E-10, 4.094E-10, 3.734E-10, 3.458E-10, 3.205E-10,
3269 2.962E-10, 2.733E-10, 2.532E-10, 2.351E-10, 2.187E-10,
3270 2.034E-10, 1.889E-10, 1.764E-10, 1.648E-10, 1.541E-10,
3271 1.443E-10, 1.355E-10, 1.274E-10, 1.198E-10, 1.133E-10,
3272 1.071E-10, 1.015E-10, 9.648E-11, 9.195E-11, 8.791E-11,
3273 8.435E-11, 8.125E-11, 7.859E-11, 7.621E-11, 7.481E-11,
3274 7.351E-11, 7.228E-11, 7.295E-11, 7.339E-11, 7.588E-11,
3275 7.701E-11, 7.886E-11, 8.511E-11, 9.061E-11, 9.926E-11,
3276 1.083E-10, 1.241E-10, 1.469E-10, 1.736E-10, 1.966E-10,
3277 2.132E-10, 2.280E-10, 2.473E-10, 2.718E-10, 2.922E-10,
3278 3.128E-10, 3.361E-10, 3.641E-10, 3.910E-10, 4.196E-10,
3279 4.501E-10, 4.932E-10, 5.258E-10, 5.755E-10, 6.253E-10,
3280 6.664E-10, 7.344E-10, 7.985E-10, 8.877E-10, 1.005E-09,
3281 1.118E-09, 1.251E-09, 1.428E-09, 1.610E-09, 1.888E-09,
3282 2.077E-09, 2.331E-09, 2.751E-09, 3.061E-09, 3.522E-09,
3283 3.805E-09, 4.181E-09, 4.575E-09, 5.167E-09, 5.634E-09,
3284 6.007E-09, 6.501E-09, 6.829E-09, 7.211E-09, 7.262E-09,
3285 7.696E-09, 7.832E-09, 7.799E-09, 7.651E-09, 7.304E-09,
3286 7.150E-09, 6.977E-09, 6.603E-09, 6.209E-09, 5.690E-09,
3287 5.432E-09, 4.764E-09, 4.189E-09, 3.640E-09, 3.203E-09,
3288 2.848E-09, 2.510E-09, 2.194E-09, 1.946E-09, 1.750E-09,
3289 1.567E-09, 1.426E-09, 1.302E-09, 1.197E-09, 1.109E-09,
3290 1.035E-09, 9.719E-10, 9.207E-10, 8.957E-10, 8.578E-10,
3291 8.262E-10, 8.117E-10, 7.987E-10, 7.875E-10, 7.741E-10,
3292 7.762E-10, 7.537E-10, 7.424E-10, 7.474E-10, 7.294E-10,
3293 7.216E-10, 7.233E-10, 7.140E-10, 7.085E-10, 6.434E-10,
3294 5.585E-10, 5.015E-10, 3.956E-10, 3.337E-10, 2.545E-10,
3295 2.141E-10, 1.761E-10, 1.685E-10, 1.507E-10, 1.241E-10,
3296 1.081E-10, 9.675E-11, 7.964E-11, 6.930E-11, 5.790E-11,
3297 5.069E-11, 4.452E-11, 3.970E-11, 3.551E-11, 3.228E-11,
3298 2.939E-11, 2.682E-11, 2.471E-11, 2.278E-11, 2.106E-11,
3299 1.950E-11, 1.811E-11, 1.682E-11, 1.563E-11, 1.458E-11,
3300 1.363E-11, 1.278E-11, 1.200E-11, 1.129E-11, 1.066E-11,
3301 1.007E-11, 9.545E-12, 9.075E-12, 8.656E-12, 8.285E-12,
3302 7.958E-12, 7.674E-12, 7.431E-12, 7.227E-12, 7.061E-12,
3303 6.934E-12, 6.843E-12, 6.790E-12, 6.775E-12, 6.798E-12,
3304 6.859E-12, 6.960E-12, 7.102E-12, 7.287E-12, 7.517E-12,
3305 7.795E-12, 8.123E-12, 8.504E-12, 8.945E-12, 9.450E-12,
3306 1.003E-11, 1.070E-11, 1.148E-11, 1.232E-11, 1.327E-11,
3307 1.441E-11, 1.535E-11, 1.655E-11, 1.814E-11, 2.020E-11,
3308 2.307E-11, 2.622E-11, 2.962E-11, 3.369E-11, 3.819E-11,
3309 4.329E-11, 4.932E-11, 5.589E-11, 6.364E-11, 7.284E-11,
3310 8.236E-11, 9.447E-11, 1.078E-10, 1.229E-10, 1.417E-10,
3311 1.614E-10, 1.843E-10, 2.107E-10, 2.406E-10, 2.728E-10,
3312 3.195E-10, 3.595E-10, 4.153E-10, 4.736E-10, 5.410E-10,
3313 6.088E-10, 6.769E-10, 7.691E-10, 8.545E-10, 9.621E-10,
3314 1.047E-09, 1.161E-09, 1.296E-09, 1.424E-09, 1.576E-09,
3315 1.739E-09, 1.893E-09, 2.080E-09, 2.336E-09, 2.604E-09,
3316 2.760E-09, 3.001E-09, 3.365E-09, 3.550E-09, 3.895E-09,
3317 4.183E-09, 4.614E-09, 4.846E-09, 5.068E-09, 5.427E-09,
3318 5.541E-09, 5.864E-09, 5.997E-09, 5.997E-09, 6.061E-09,
3319 5.944E-09, 5.855E-09, 5.661E-09, 5.523E-09, 5.374E-09,
3320 4.940E-09, 4.688E-09, 4.170E-09, 3.913E-09, 3.423E-09,
3321 2.997E-09, 2.598E-09, 2.253E-09, 1.946E-09, 1.710E-09,
3322 1.507E-09, 1.336E-09, 1.190E-09, 1.068E-09, 9.623E-10,
3323 8.772E-10, 8.007E-10, 7.420E-10, 6.884E-10, 6.483E-10,
3324 6.162E-10, 5.922E-10, 5.688E-10, 5.654E-10, 5.637E-10,
3325 5.701E-10, 5.781E-10, 5.874E-10, 6.268E-10, 6.357E-10,
3326 6.525E-10, 7.137E-10, 7.441E-10, 8.024E-10, 8.485E-10,
3327 9.143E-10, 9.536E-10, 9.717E-10, 1.018E-09, 1.042E-09,
3328 1.054E-09, 1.092E-09, 1.093E-09, 1.072E-09, 1.046E-09,
3329 9.283E-10, 8.053E-10, 6.680E-10, 5.630E-10, 4.933E-10,
3330 3.488E-10, 3.324E-10, 2.826E-10, 2.429E-10, 2.051E-10,
3331 1.679E-10, 1.411E-10, 1.240E-10, 1.098E-10, 9.668E-11,
3332 8.529E-11, 7.848E-11, 7.098E-11, 6.117E-11, 5.246E-11,
3333 4.521E-11, 4.059E-11, 3.783E-11, 3.502E-11, 3.271E-11,
3334 2.956E-11, 2.636E-11, 2.464E-11, 2.190E-11, 1.986E-11,
3335 1.791E-11, 1.638E-11, 1.491E-11, 1.383E-11, 1.271E-11,
3336 1.166E-11, 1.082E-11, 1.002E-11, 9.317E-12, 8.697E-12,
3337 8.157E-12, 7.678E-12, 7.252E-12, 6.874E-12, 6.539E-12,
3338 6.243E-12, 5.985E-12, 5.763E-12, 5.575E-12, 5.421E-12,
3339 5.300E-12, 5.212E-12, 5.157E-12, 5.138E-12, 5.156E-12,
3340 5.214E-12, 5.313E-12, 5.457E-12, 5.686E-12, 5.953E-12,
3341 6.284E-12, 6.856E-12, 7.351E-12, 8.006E-12, 8.957E-12,
3342 1.031E-11, 1.170E-11, 1.345E-11, 1.623E-11, 1.999E-11,
3343 2.507E-11, 3.004E-11, 3.378E-11, 3.688E-11, 4.118E-11,
3344 4.569E-11, 5.025E-11, 5.660E-11, 6.231E-11, 6.881E-11,
3345 7.996E-11, 8.526E-11, 9.694E-11, 1.106E-10, 1.222E-10,
3346 1.355E-10, 1.525E-10, 1.775E-10, 1.924E-10, 2.181E-10,
3347 2.379E-10, 2.662E-10, 2.907E-10, 3.154E-10, 3.366E-10,
3348 3.579E-10, 3.858E-10, 4.046E-10, 4.196E-10, 4.166E-10,
3349 4.457E-10, 4.466E-10, 4.404E-10, 4.337E-10, 4.150E-10,
3350 4.083E-10, 3.910E-10, 3.723E-10, 3.514E-10, 3.303E-10,
3351 2.847E-10, 2.546E-10, 2.230E-10, 1.994E-10, 1.733E-10,
3352 1.488E-10, 1.297E-10, 1.144E-10, 1.004E-10, 8.741E-11,
3353 7.928E-11, 7.034E-11, 6.323E-11, 5.754E-11, 5.250E-11,
3354 4.850E-11, 4.502E-11, 4.286E-11, 4.028E-11, 3.899E-11,
3355 3.824E-11, 3.761E-11, 3.804E-11, 3.839E-11, 3.845E-11,
3356 4.244E-11, 4.382E-11, 4.582E-11, 4.847E-11, 5.209E-11,
3357 5.384E-11, 5.887E-11, 6.371E-11, 6.737E-11, 7.168E-11,
3358 7.415E-11, 7.827E-11, 8.037E-11, 8.120E-11, 8.154E-11,
3359 7.981E-11, 7.783E-11, 6.900E-11, 6.030E-11, 4.900E-11,
3360 3.878E-11, 3.068E-11, 2.533E-11, 2.255E-11, 2.056E-11,
3361 1.569E-11, 1.398E-11, 1.149E-11, 9.249E-12, 7.706E-12,
3362 6.436E-12, 5.514E-12, 4.782E-12, 4.202E-12, 3.721E-12,
3363 3.336E-12, 3.015E-12, 2.744E-12, 2.512E-12, 2.312E-12,
3364 2.138E-12, 1.987E-12, 1.855E-12, 1.741E-12, 1.642E-12,
3365 1.557E-12, 1.483E-12, 1.422E-12, 1.370E-12, 1.329E-12,
3366 1.297E-12, 1.274E-12, 1.259E-12, 1.253E-12, 1.255E-12,
3367 1.266E-12, 1.284E-12, 1.312E-12, 1.348E-12, 1.393E-12,
3368 1.448E-12, 1.512E-12, 1.587E-12, 1.672E-12, 1.770E-12,
3369 1.880E-12, 1.990E-12, 2.110E-12, 2.274E-12, 2.516E-12,
3370 2.844E-12, 3.231E-12, 3.661E-12, 4.153E-12, 4.717E-12,
3371 5.360E-12, 6.094E-12, 6.930E-12, 7.882E-12, 8.966E-12,
3372 1.020E-11, 1.162E-11, 1.324E-11, 1.510E-11, 1.720E-11,
3373 1.965E-11, 2.237E-11, 2.560E-11, 2.927E-11, 3.371E-11,
3374 3.842E-11, 4.429E-11, 5.139E-11, 5.798E-11, 6.697E-11,
3375 7.626E-11, 8.647E-11, 1.022E-10, 1.136E-10, 1.300E-10,
3376 1.481E-10, 1.672E-10, 1.871E-10, 2.126E-10, 2.357E-10,
3377 2.583E-10, 2.997E-10, 3.289E-10, 3.702E-10, 4.012E-10,
3378 4.319E-10, 4.527E-10, 5.001E-10, 5.448E-10, 5.611E-10,
3379 5.760E-10, 5.965E-10, 6.079E-10, 6.207E-10, 6.276E-10,
3380 6.222E-10, 6.137E-10, 6.000E-10, 5.814E-10, 5.393E-10,
3381 5.350E-10, 4.947E-10, 4.629E-10, 4.117E-10, 3.712E-10,
3382 3.372E-10, 2.923E-10, 2.550E-10, 2.232E-10, 1.929E-10,
3383 1.679E-10, 1.460E-10, 1.289E-10, 1.130E-10, 9.953E-11,
3384 8.763E-11, 7.760E-11, 6.900E-11, 6.160E-11, 5.525E-11,
3385 4.958E-11, 4.489E-11, 4.072E-11, 3.728E-11, 3.438E-11,
3386 3.205E-11, 3.006E-11, 2.848E-11, 2.766E-11, 2.688E-11,
3387 2.664E-11, 2.670E-11, 2.696E-11, 2.786E-11, 2.861E-11,
3388 3.009E-11, 3.178E-11, 3.389E-11, 3.587E-11, 3.819E-11,
3389 4.054E-11, 4.417E-11, 4.703E-11, 5.137E-11, 5.460E-11,
3390 6.055E-11, 6.333E-11, 6.773E-11, 7.219E-11, 7.717E-11,
3391 8.131E-11, 8.491E-11, 8.574E-11, 9.010E-11, 9.017E-11,
3392 8.999E-11, 8.959E-11, 8.838E-11, 8.579E-11, 8.162E-11,
3393 8.098E-11, 7.472E-11, 7.108E-11, 6.559E-11, 5.994E-11,
3394 5.172E-11, 4.424E-11, 3.951E-11, 3.340E-11, 2.902E-11,
3395 2.541E-11, 2.215E-11, 1.945E-11, 1.716E-11, 1.503E-11,
3396 1.339E-11, 1.185E-11, 1.050E-11, 9.336E-12, 8.307E-12,
3397 7.312E-12, 6.550E-12, 5.836E-12, 5.178E-12, 4.600E-12,
3398 4.086E-12, 3.639E-12, 3.247E-12, 2.904E-12, 2.604E-12,
3399 2.341E-12, 2.112E-12, 1.914E-12, 1.744E-12, 1.598E-12,
3400 1.476E-12, 1.374E-12, 1.293E-12, 1.230E-12, 1.185E-12,
3401 1.158E-12, 1.147E-12, 1.154E-12, 1.177E-12, 1.219E-12,
3402 1.280E-12, 1.360E-12, 1.463E-12, 1.591E-12, 1.750E-12,
3403 1.940E-12, 2.156E-12, 2.430E-12, 2.748E-12, 3.052E-12,
3404 3.533E-12, 3.967E-12, 4.471E-12, 5.041E-12, 5.860E-12,
3405 6.664E-12, 7.522E-12, 8.342E-12, 9.412E-12, 1.072E-11,
3406 1.213E-11, 1.343E-11, 1.496E-11, 1.664E-11, 1.822E-11,
3407 2.029E-11, 2.233E-11, 2.457E-11, 2.709E-11, 2.928E-11,
3408 3.115E-11, 3.356E-11, 3.592E-11, 3.818E-11, 3.936E-11,
3409 4.061E-11, 4.149E-11, 4.299E-11, 4.223E-11, 4.251E-11,
3410 4.287E-11, 4.177E-11, 4.094E-11, 3.942E-11, 3.772E-11,
3411 3.614E-11, 3.394E-11, 3.222E-11, 2.791E-11, 2.665E-11,
3412 2.309E-11, 2.032E-11, 1.740E-11, 1.535E-11, 1.323E-11,
3413 1.151E-11, 9.803E-12, 8.650E-12, 7.540E-12, 6.619E-12,
3414 5.832E-12, 5.113E-12, 4.503E-12, 3.975E-12, 3.520E-12,
3415 3.112E-12, 2.797E-12, 2.500E-12, 2.240E-12, 2.013E-12,
3416 1.819E-12, 1.653E-12, 1.513E-12, 1.395E-12, 1.299E-12,
3417 1.225E-12, 1.168E-12, 1.124E-12, 1.148E-12, 1.107E-12,
3418 1.128E-12, 1.169E-12, 1.233E-12, 1.307E-12, 1.359E-12,
3419 1.543E-12, 1.686E-12, 1.794E-12, 2.028E-12, 2.210E-12,
3420 2.441E-12, 2.653E-12, 2.828E-12, 3.093E-12, 3.280E-12,
3421 3.551E-12, 3.677E-12, 3.803E-12, 3.844E-12, 4.068E-12,
3422 4.093E-12, 4.002E-12, 3.904E-12, 3.624E-12, 3.633E-12,
3423 3.622E-12, 3.443E-12, 3.184E-12, 2.934E-12, 2.476E-12,
3424 2.212E-12, 1.867E-12, 1.594E-12, 1.370E-12, 1.192E-12,
3425 1.045E-12, 9.211E-13, 8.170E-13, 7.290E-13, 6.550E-13,
3426 5.929E-13, 5.415E-13, 4.995E-13, 4.661E-13, 4.406E-13,
3427 4.225E-13, 4.116E-13, 4.075E-13, 4.102E-13, 4.198E-13,
3428 4.365E-13, 4.606E-13, 4.925E-13, 5.326E-13, 5.818E-13,
3429 6.407E-13, 7.104E-13, 7.920E-13, 8.868E-13, 9.964E-13,
3430 1.123E-12, 1.268E-12, 1.434E-12, 1.626E-12, 1.848E-12,
3431 2.107E-12, 2.422E-12, 2.772E-12, 3.145E-12, 3.704E-12,
3432 4.270E-12, 4.721E-12, 5.361E-12, 6.083E-12, 7.095E-12,
3433 7.968E-12, 9.228E-12, 1.048E-11, 1.187E-11, 1.336E-11,
3434 1.577E-11, 1.772E-11, 2.017E-11, 2.250E-11, 2.630E-11,
3435 2.911E-11, 3.356E-11, 3.820E-11, 4.173E-11, 4.811E-11,
3436 5.254E-11, 5.839E-11, 6.187E-11, 6.805E-11, 7.118E-11,
3437 7.369E-11, 7.664E-11, 7.794E-11, 7.947E-11, 8.036E-11,
3438 7.954E-11, 7.849E-11, 7.518E-11, 7.462E-11, 6.926E-11,
3439 6.531E-11, 6.197E-11, 5.421E-11, 4.777E-11, 4.111E-11,
3440 3.679E-11, 3.166E-11, 2.786E-11, 2.436E-11, 2.144E-11,
3441 1.859E-11, 1.628E-11, 1.414E-11, 1.237E-11, 1.093E-11,
3442 9.558e-12 }; // end section diff to MT 1.0
3443
3444// H2O self continuum parameters at T=260 K
3445// date of last update: 10/29/18
3446// units of (CM**3/MOL)*1.E-20
3447const Numeric SL260_ckd_mt_320_v1 = -20.0;
3448const Numeric SL260_ckd_mt_320_v2 = 20000.0;
3449const Numeric SL260_ckd_mt_320_dv = 10.0;
3450const int SL260_ckd_mt_320_npt = 2003;
3451const double SL260_ckd_mt_320[SL260_ckd_mt_320_npt+addF77fields] = {
3452 0.000e0, 2.749e-01, 2.732e-01,
3453 2.752e-01, 2.732e-01, 2.749e-01, 2.676e-01, 2.667e-01,
3454 2.545e-01, 2.497e-01, 2.327e-01, 2.218e-01, 2.036e-01,
3455 1.825e-01, 1.694e-01, 1.497e-01, 1.353e-01, 1.210e-01,
3456 1.014e-01, 9.405e-02, 7.848e-02, 7.195e-02, 6.246e-02,
3457 5.306e-02, 4.853e-02, 4.138e-02, 3.735e-02, 3.171e-02,
3458 2.785e-02, 2.431e-02, 2.111e-02, 1.845e-02, 1.640e-02,
3459 1.405e-02, 1.255e-02, 1.098e-02, 9.797e-03, 8.646e-03,
3460 7.779e-03, 6.898e-03, 6.099e-03, 5.453e-03, 4.909e-03,
3461 4.413e-03, 3.959e-03, 3.581e-03, 3.199e-03, 2.871e-03,
3462 2.583e-03, 2.330e-03, 2.086e-03, 1.874e-03, 1.684e-03,
3463 1.512e-03, 1.361e-03, 1.225e-03, 1.100e-03, 9.890e-04,
3464 8.916e-04, 8.039e-04, 7.256e-04, 6.545e-04, 5.918e-04,
3465 5.359e-04, 4.867e-04, 4.426e-04, 4.033e-04, 3.682e-04,
3466 3.366e-04, 3.085e-04, 2.833e-04, 2.605e-04, 2.403e-04,
3467 2.221e-04, 2.055e-04, 1.908e-04, 1.774e-04, 1.653e-04,
3468 1.544e-04, 1.443e-04, 1.351e-04, 1.267e-04, 1.190e-04,
3469 1.119e-04, 1.053e-04, 9.922e-05, 9.355e-05, 8.831e-05,
3470 8.339e-05, 7.878e-05, 7.449e-05, 7.043e-05, 6.664e-05,
3471 6.307e-05, 5.969e-05, 5.654e-05, 5.357e-05, 5.075e-05,
3472 4.810e-05, 4.560e-05, 4.322e-05, 4.102e-05, 3.892e-05,
3473 3.696e-05, 3.511e-05, 3.339e-05, 3.177e-05, 3.026e-05,
3474 2.886e-05, 2.756e-05, 2.636e-05, 2.527e-05, 2.427e-05,
3475 2.337e-05, 2.257e-05, 2.185e-05, 2.127e-05, 2.080e-05,
3476 2.041e-05, 2.013e-05, 2.000e-05, 1.997e-05, 2.009e-05,
3477 2.031e-05, 2.068e-05, 2.124e-05, 2.189e-05, 2.267e-05,
3478 2.364e-05, 2.463e-05, 2.618e-05, 2.774e-05, 2.937e-05,
3479 3.144e-05, 3.359e-05, 3.695e-05, 4.002e-05, 4.374e-05,
3480 4.947e-05, 5.431e-05, 6.281e-05, 7.169e-05, 8.157e-05,
3481 9.728e-05, 1.079e-04, 1.337e-04, 1.442e-04, 1.683e-04,
3482 1.879e-04, 2.223e-04, 2.425e-04, 2.838e-04, 3.143e-04,
3483 3.527e-04, 4.012e-04, 4.237e-04, 4.747e-04, 5.057e-04,
3484 5.409e-04, 5.734e-04, 5.944e-04, 6.077e-04, 6.175e-04,
3485 6.238e-04, 6.226e-04, 6.248e-04, 6.192e-04, 6.098e-04,
3486 5.818e-04, 5.709e-04, 5.465e-04, 5.043e-04, 4.699e-04,
3487 4.294e-04, 3.984e-04, 3.672e-04, 3.152e-04, 2.883e-04,
3488 2.503e-04, 2.211e-04, 1.920e-04, 1.714e-04, 1.485e-04,
3489 1.358e-04, 1.156e-04, 1.021e-04, 8.887e-05, 7.842e-05,
3490 7.120e-05, 6.186e-05, 5.730e-05, 4.792e-05, 4.364e-05,
3491 3.720e-05, 3.280e-05, 2.946e-05, 2.591e-05, 2.261e-05,
3492 2.048e-05, 1.813e-05, 1.630e-05, 1.447e-05, 1.282e-05, // section diff to MTCKD 1.00
3493 1.156E-05, 1.072E-05, 9.922E-06, 8.919E-06, 7.974E-06,
3494 7.050E-06, 6.301E-06, 5.559E-06, 4.978E-06, 4.371E-06,
3495 3.941E-06, 3.479E-06, 3.119E-06, 2.795E-06, 2.624E-06,
3496 2.458E-06, 2.321E-06, 2.192E-06, 2.077E-06, 1.966E-06,
3497 1.863E-06, 1.775E-06, 1.691E-06, 1.617E-06, 1.545E-06,
3498 1.484E-06, 1.422E-06, 1.371E-06, 1.320E-06, 1.275E-06,
3499 1.233E-06, 1.187E-06, 1.145E-06, 1.118E-06, 1.082E-06,
3500 1.048E-06, 1.020E-06, 9.889E-07, 9.649E-07, 9.368E-07,
3501 9.174E-07, 8.960E-07, 8.763E-07, 8.566E-07, 8.381E-07,
3502 8.192E-07, 8.033E-07, 7.864E-07, 7.715E-07, 7.563E-07,
3503 7.429E-07, 7.282E-07, 7.149E-07, 7.011E-07, 6.901E-07,
3504 6.771E-07, 6.671E-07, 6.577E-07, 6.476E-07, 6.376E-07,
3505 6.313E-07, 6.233E-07, 6.171E-07, 6.163E-07, 6.162E-07,
3506 6.186E-07, 6.241E-07, 6.337E-07, 6.420E-07, 6.421E-07,
3507 6.368E-07, 6.269E-07, 6.141E-07, 6.023E-07, 5.886E-07,
3508 5.730E-07, 5.601E-07, 5.496E-07, 5.414E-07, 5.354E-07,
3509 5.285E-07, 5.233E-07, 5.199E-07, 5.168E-07, 5.145E-07,
3510 5.125E-07, 5.112E-07, 5.125E-07, 5.135E-07, 5.209E-07,
3511 5.256E-07, 5.357E-07, 5.503E-07, 5.636E-07, 5.891E-07,
3512 6.194E-07, 6.511E-07, 6.915E-07, 7.401E-07, 8.004E-07,
3513 8.606E-07, 9.087E-07, 1.003E-06, 1.043E-06, 1.190E-06,
3514 1.293E-06, 1.398E-06, 1.508E-06, 1.649E-06, 1.735E-06,
3515 1.852E-06, 1.955E-06, 2.056E-06, 2.079E-06, 2.127E-06,
3516 2.117E-06, 2.109E-06, 2.101E-06, 2.122E-06, 2.097E-06,
3517 2.142E-06, 2.139E-06, 2.138E-06, 2.097E-06, 2.069E-06,
3518 2.072E-06, 2.038E-06, 2.020E-06, 2.052E-06, 2.046E-06,
3519 2.077E-06, 2.103E-06, 2.163E-06, 2.244E-06, 2.388E-06,
3520 2.552E-06, 2.773E-06, 3.067E-06, 3.360E-06, 3.714E-06,
3521 4.172E-06, 4.643E-06, 5.116E-06, 5.831E-06, 6.522E-06,
3522 7.478E-06, 8.312E-06, 9.407E-06, 1.051E-05, 1.207E-05,
3523 1.359E-05, 1.568E-05, 1.759E-05, 2.029E-05, 2.284E-05,
3524 2.602E-05, 2.940E-05, 3.483E-05, 3.928E-05, 4.618E-05,
3525 5.240E-05, 6.132E-05, 7.183E-05, 8.521E-05, 9.111E-05,
3526 1.070E-04, 1.184E-04, 1.264E-04, 1.475E-04, 1.612E-04,
3527 1.704E-04, 1.818E-04, 1.924E-04, 1.994E-04, 2.061E-04,
3528 2.180E-04, 2.187E-04, 2.200E-04, 2.196E-04, 2.131E-04,
3529 2.015E-04, 1.988E-04, 1.847E-04, 1.729E-04, 1.597E-04,
3530 1.373E-04, 1.262E-04, 1.087E-04, 9.439E-05, 8.061E-05,
3531 7.093E-05, 6.049E-05, 5.120E-05, 4.435E-05, 3.817E-05,
3532 3.340E-05, 2.927E-05, 2.573E-05, 2.291E-05, 2.040E-05,
3533 1.827E-05, 1.636E-05, 1.463E-05, 1.309E-05, 1.170E-05,
3534 1.047E-05, 9.315E-06, 8.328E-06, 7.458E-06, 6.665E-06,
3535 5.940E-06, 5.316E-06, 4.752E-06, 4.252E-06, 3.825E-06,
3536 3.421E-06, 3.064E-06, 2.746E-06, 2.465E-06, 2.216E-06,
3537 1.990E-06, 1.790E-06, 1.609E-06, 1.449E-06, 1.306E-06,
3538 1.171E-06, 1.056E-06, 9.738E-07, 9.212E-07, 8.894E-07,
3539 8.561E-07, 8.183E-07, 7.824E-07, 7.484E-07, 7.168E-07,
3540 6.872E-07, 6.590E-07, 6.325E-07, 6.070E-07, 5.833E-07,
3541 5.610E-07, 5.400E-07, 5.197E-07, 5.005E-07, 4.823E-07,
3542 4.652E-07, 4.483E-07, 4.329E-07, 4.177E-07, 4.029E-07,
3543 3.888E-07, 3.749E-07, 3.618E-07, 3.492E-07, 3.377E-07,
3544 3.269E-07, 3.166E-07, 3.081E-07, 3.010E-07, 2.947E-07,
3545 2.890E-07, 2.844E-07, 2.789E-07, 2.731E-07, 2.670E-07,
3546 2.604E-07, 2.525E-07, 2.444E-07, 2.384E-07, 2.328E-07,
3547 2.280E-07, 2.230E-07, 2.183E-07, 2.144E-07, 2.105E-07,
3548 2.073E-07, 2.046E-07, 2.022E-07, 2.002E-07, 1.985E-07,
3549 1.975E-07, 1.965E-07, 1.960E-07, 1.954E-07, 1.954E-07,
3550 1.960E-07, 1.971E-07, 1.984E-07, 2.003E-07, 2.026E-07,
3551 2.058E-07, 2.099E-07, 2.142E-07, 2.171E-07, 2.206E-07,
3552 2.312E-07, 2.523E-07, 2.834E-07, 3.195E-07, 3.587E-07,
3553 4.015E-07, 4.497E-07, 5.049E-07, 5.665E-07, 6.366E-07,
3554 7.121E-07, 7.996E-07, 8.946E-07, 1.002E-06, 1.117E-06,
3555 1.262E-06, 1.416E-06, 1.611E-06, 1.807E-06, 2.056E-06,
3556 2.351E-06, 2.769E-06, 3.138E-06, 3.699E-06, 4.386E-06,
3557 5.041E-06, 6.074E-06, 6.812E-06, 7.790E-06, 8.855E-06,
3558 1.014E-05, 1.095E-05, 1.245E-05, 1.316E-05, 1.390E-05,
3559 1.504E-05, 1.583E-05, 1.617E-05, 1.652E-05, 1.713E-05,
3560 1.724E-05, 1.715E-05, 1.668E-05, 1.629E-05, 1.552E-05,
3561 1.478E-05, 1.340E-05, 1.245E-05, 1.121E-05, 9.575E-06,
3562 8.956E-06, 7.345E-06, 6.597E-06, 5.612E-06, 4.818E-06,
3563 4.165E-06, 3.579E-06, 3.041E-06, 2.623E-06, 2.290E-06,
3564 1.984E-06, 1.748E-06, 1.534E-06, 1.369E-06, 1.219E-06,
3565 1.092E-06, 9.800E-07, 8.762E-07, 7.896E-07, 7.104E-07,
3566 6.364E-07, 5.691E-07, 5.107E-07, 4.575E-07, 4.090E-07,
3567 3.667E-07, 3.287E-07, 2.931E-07, 2.633E-07, 2.356E-07,
3568 2.111E-07, 1.895E-07, 1.697E-07, 1.525E-07, 1.369E-07,
3569 1.233E-07, 1.114E-07, 9.988E-08, 9.004E-08, 8.149E-08,
3570 7.311E-08, 6.587E-08, 6.014E-08, 5.618E-08, 5.320E-08,
3571 5.052E-08, 4.768E-08, 4.514E-08, 4.267E-08, 4.032E-08,
3572 3.815E-08, 3.605E-08, 3.409E-08, 3.219E-08, 3.038E-08,
3573 2.869E-08, 2.710E-08, 2.563E-08, 2.418E-08, 2.288E-08,
3574 2.166E-08, 2.051E-08, 1.945E-08, 1.844E-08, 1.745E-08,
3575 1.650E-08, 1.558E-08, 1.471E-08, 1.387E-08, 1.308E-08,
3576 1.235E-08, 1.169E-08, 1.107E-08, 1.050E-08, 9.963E-09,
3577 9.461E-09, 9.004E-09, 8.580E-09, 8.191E-09, 7.835E-09,
3578 7.525E-09, 7.242E-09, 7.004E-09, 6.798E-09, 6.617E-09,
3579 6.463E-09, 6.355E-09, 6.267E-09, 6.194E-09, 6.156E-09,
3580 6.144E-09, 6.159E-09, 6.210E-09, 6.288E-09, 6.398E-09,
3581 6.536E-09, 6.719E-09, 6.929E-09, 7.176E-09, 7.459E-09,
3582 7.787E-09, 8.147E-09, 8.573E-09, 9.024E-09, 9.547E-09,
3583 1.011E-08, 1.073E-08, 1.146E-08, 1.217E-08, 1.306E-08,
3584 1.411E-08, 1.525E-08, 1.637E-08, 1.776E-08, 1.958E-08,
3585 2.136E-08, 2.372E-08, 2.612E-08, 2.944E-08, 3.249E-08,
3586 3.740E-08, 4.244E-08, 4.845E-08, 5.630E-08, 6.728E-08,
3587 7.908E-08, 9.511E-08, 1.128E-07, 1.358E-07, 1.587E-07,
3588 1.904E-07, 2.224E-07, 2.660E-07, 3.278E-07, 3.775E-07,
3589 4.355E-07, 4.672E-07, 5.110E-07, 5.461E-07, 5.828E-07,
3590 6.233E-07, 6.509E-07, 6.672E-07, 6.969E-07, 7.104E-07,
3591 7.439E-07, 7.463E-07, 7.708E-07, 7.466E-07, 7.668E-07,
3592 7.549E-07, 7.586E-07, 7.384E-07, 7.439E-07, 7.785E-07,
3593 7.915E-07, 8.310E-07, 8.745E-07, 9.558E-07, 1.038E-06,
3594 1.173E-06, 1.304E-06, 1.452E-06, 1.671E-06, 1.931E-06,
3595 2.239E-06, 2.578E-06, 3.032E-06, 3.334E-06, 3.980E-06,
3596 4.300E-06, 4.518E-06, 5.321E-06, 5.508E-06, 6.211E-06,
3597 6.590E-06, 7.046E-06, 7.555E-06, 7.558E-06, 7.875E-06,
3598 8.319E-06, 8.433E-06, 8.590E-06, 8.499E-06, 8.284E-06,
3599 8.276E-06, 7.587E-06, 7.014E-06, 6.397E-06, 5.520E-06,
3600 4.888E-06, 4.024E-06, 3.433E-06, 2.726E-06, 2.169E-06,
3601 1.811E-06, 1.438E-06, 1.156E-06, 9.272E-07, 7.455E-07,
3602 6.056E-07, 4.980E-07, 4.116E-07, 3.425E-07, 2.878E-07,
3603 2.455E-07, 2.114E-07, 1.862E-07, 1.667E-07, 1.507E-07,
3604 1.370E-07, 1.260E-07, 1.153E-07, 1.065E-07, 9.812E-08,
3605 9.045E-08, 8.334E-08, 7.719E-08, 7.133E-08, 6.653E-08,
3606 6.160E-08, 5.753E-08, 5.349E-08, 5.005E-08, 4.693E-08,
3607 4.388E-08, 4.127E-08, 3.883E-08, 3.653E-08, 3.443E-08,
3608 3.256E-08, 3.075E-08, 2.899E-08, 2.735E-08, 2.586E-08,
3609 2.443E-08, 2.305E-08, 2.177E-08, 2.049E-08, 1.938E-08,
3610 1.833E-08, 1.734E-08, 1.638E-08, 1.548E-08, 1.464E-08,
3611 1.386E-08, 1.310E-08, 1.239E-08, 1.173E-08, 1.110E-08,
3612 1.051E-08, 9.947E-09, 9.414E-09, 8.911E-09, 8.435E-09,
3613 7.989E-09, 7.567E-09, 7.174E-09, 6.804E-09, 6.460E-09,
3614 6.132E-09, 5.828E-09, 5.550E-09, 5.286E-09, 5.049E-09,
3615 4.831E-09, 4.658E-09, 4.505E-09, 4.413E-09, 4.362E-09,
3616 4.489E-09, 4.487E-09, 4.761E-09, 5.278E-09, 5.630E-09,
3617 6.056E-09, 6.633E-09, 7.337E-09, 7.954E-09, 8.869E-09,
3618 9.500E-09, 1.027E-08, 1.087E-08, 1.204E-08, 1.304E-08,
3619 1.413E-08, 1.529E-08, 1.586E-08, 1.649E-08, 1.661E-08,
3620 1.703E-08, 1.741E-08, 1.766E-08, 1.779E-08, 1.816E-08,
3621 1.866E-08, 1.889E-08, 1.904E-08, 1.897E-08, 1.893E-08,
3622 1.888E-08, 1.868E-08, 1.895E-08, 1.899E-08, 1.876E-08,
3623 1.960E-08, 2.020E-08, 2.121E-08, 2.239E-08, 2.379E-08,
3624 2.526E-08, 2.766E-08, 2.994E-08, 3.332E-08, 3.703E-08,
3625 4.158E-08, 4.774E-08, 5.499E-08, 6.355E-08, 7.349E-08,
3626 8.414E-08, 9.846E-08, 1.143E-07, 1.307E-07, 1.562E-07,
3627 1.817E-07, 2.011E-07, 2.192E-07, 2.485E-07, 2.867E-07,
3628 3.035E-07, 3.223E-07, 3.443E-07, 3.617E-07, 3.793E-07,
3629 3.793E-07, 3.839E-07, 4.081E-07, 4.117E-07, 4.085E-07,
3630 3.920E-07, 3.851E-07, 3.754E-07, 3.490E-07, 3.229E-07,
3631 2.978E-07, 2.691E-07, 2.312E-07, 2.029E-07, 1.721E-07,
3632 1.472E-07, 1.308E-07, 1.132E-07, 9.736E-08, 8.458E-08,
3633 7.402E-08, 6.534E-08, 5.811E-08, 5.235E-08, 4.762E-08,
3634 4.293E-08, 3.896E-08, 3.526E-08, 3.165E-08, 2.833E-08,
3635 2.551E-08, 2.288E-08, 2.036E-08, 1.820E-08, 1.626E-08,
3636 1.438E-08, 1.299E-08, 1.149E-08, 1.030E-08, 9.148E-09,
3637 8.122E-09, 7.264E-09, 6.425E-09, 5.777E-09, 5.060E-09,
3638 4.502E-09, 4.013E-09, 3.567E-09, 3.145E-09, 2.864E-09,
3639 2.553E-09, 2.311E-09, 2.087E-09, 1.886E-09, 1.716E-09,
3640 1.556E-09, 1.432E-09, 1.311E-09, 1.196E-09, 1.091E-09,
3641 1.006E-09, 9.428E-10, 8.900E-10, 8.438E-10, 8.005E-10,
3642 7.597E-10, 7.201E-10, 6.818E-10, 6.550E-10, 6.286E-10,
3643 6.004E-10, 5.730E-10, 5.466E-10, 5.203E-10, 4.968E-10,
3644 4.741E-10, 4.520E-10, 4.314E-10, 4.124E-10, 3.944E-10,
3645 3.777E-10, 3.619E-10, 3.477E-10, 3.344E-10, 3.217E-10,
3646 3.096E-10, 2.999E-10, 2.898E-10, 2.826E-10, 2.750E-10,
3647 2.701E-10, 2.651E-10, 2.641E-10, 2.671E-10, 2.670E-10,
3648 2.748E-10, 2.863E-10, 3.051E-10, 3.163E-10, 3.284E-10,
3649 3.408E-10, 3.601E-10, 3.710E-10, 3.878E-10, 4.028E-10,
3650 4.159E-10, 4.296E-10, 4.371E-10, 4.463E-10, 4.520E-10,
3651 4.554E-10, 4.716E-10, 4.791E-10, 4.900E-10, 5.001E-10,
3652 4.999E-10, 5.061E-10, 5.291E-10, 5.416E-10, 5.994E-10,
3653 6.394E-10, 6.807E-10, 7.250E-10, 7.847E-10, 8.430E-10,
3654 9.146E-10, 9.907E-10, 1.062E-09, 1.170E-09, 1.277E-09,
3655 1.401E-09, 1.524E-09, 1.674E-09, 1.888E-09, 2.112E-09,
3656 2.322E-09, 2.808E-09, 3.269E-09, 3.902E-09, 4.614E-09,
3657 5.763E-09, 6.747E-09, 8.972E-09, 1.118E-08, 1.428E-08,
3658 1.713E-08, 1.948E-08, 2.090E-08, 2.211E-08, 2.362E-08,
3659 2.556E-08, 2.729E-08, 2.880E-08, 3.046E-08, 3.167E-08,
3660 3.367E-08, 3.457E-08, 3.590E-08, 3.711E-08, 3.826E-08,
3661 4.001E-08, 4.211E-08, 4.315E-08, 4.661E-08, 5.010E-08,
3662 5.249E-08, 5.840E-08, 6.628E-08, 7.512E-08, 8.253E-08,
3663 9.722E-08, 1.067E-07, 1.153E-07, 1.347E-07, 1.428E-07,
3664 1.577E-07, 1.694E-07, 1.833E-07, 1.938E-07, 2.108E-07,
3665 2.059E-07, 2.157E-07, 2.185E-07, 2.208E-07, 2.182E-07,
3666 2.093E-07, 2.014E-07, 1.962E-07, 1.819E-07, 1.713E-07,
3667 1.510E-07, 1.340E-07, 1.154E-07, 9.890E-08, 8.880E-08,
3668 7.673E-08, 6.599E-08, 5.730E-08, 5.081E-08, 4.567E-08,
3669 4.147E-08, 3.773E-08, 3.460E-08, 3.194E-08, 2.953E-08,
3670 2.759E-08, 2.594E-08, 2.442E-08, 2.355E-08, 2.283E-08,
3671 2.279E-08, 2.231E-08, 2.279E-08, 2.239E-08, 2.210E-08,
3672 2.309E-08, 2.293E-08, 2.352E-08, 2.415E-08, 2.430E-08,
3673 2.426E-08, 2.465E-08, 2.500E-08, 2.496E-08, 2.465E-08,
3674 2.475E-08, 2.179E-08, 1.934E-08, 1.676E-08, 1.415E-08,
3675 1.115E-08, 9.148E-09, 7.692E-09, 6.193E-09, 5.401E-09,
3676 4.341E-09, 3.734E-09, 3.127E-09, 2.619E-09, 2.181E-09,
3677 1.887E-09, 1.625E-09, 1.456E-09, 1.304E-09, 1.190E-09,
3678 1.083E-09, 1.012E-09, 9.153E-10, 8.434E-10, 7.828E-10,
3679 7.210E-10, 6.665E-10, 6.136E-10, 5.728E-10, 5.351E-10,
3680 4.985E-10, 4.633E-10, 4.337E-10, 4.069E-10, 3.825E-10,
3681 3.596E-10, 3.374E-10, 3.186E-10, 3.006E-10, 2.837E-10,
3682 2.681E-10, 2.538E-10, 2.405E-10, 2.277E-10, 2.167E-10,
3683 2.060E-10, 1.961E-10, 1.871E-10, 1.788E-10, 1.711E-10,
3684 1.639E-10, 1.574E-10, 1.515E-10, 1.456E-10, 1.411E-10,
3685 1.365E-10, 1.315E-10, 1.296E-10, 1.262E-10, 1.264E-10,
3686 1.257E-10, 1.252E-10, 1.327E-10, 1.392E-10, 1.519E-10,
3687 1.664E-10, 1.911E-10, 2.276E-10, 2.702E-10, 3.086E-10,
3688 3.378E-10, 3.632E-10, 3.957E-10, 4.360E-10, 4.701E-10,
3689 5.030E-10, 5.381E-10, 5.793E-10, 6.190E-10, 6.596E-10,
3690 7.004E-10, 7.561E-10, 7.934E-10, 8.552E-10, 9.142E-10,
3691 9.570E-10, 1.027E-09, 1.097E-09, 1.193E-09, 1.334E-09,
3692 1.470E-09, 1.636E-09, 1.871E-09, 2.122E-09, 2.519E-09,
3693 2.806E-09, 3.203E-09, 3.846E-09, 4.362E-09, 5.114E-09,
3694 5.643E-09, 6.305E-09, 6.981E-09, 7.983E-09, 8.783E-09,
3695 9.419E-09, 1.017E-08, 1.063E-08, 1.121E-08, 1.130E-08,
3696 1.201E-08, 1.225E-08, 1.232E-08, 1.223E-08, 1.177E-08,
3697 1.151E-08, 1.116E-08, 1.047E-08, 9.698E-09, 8.734E-09,
3698 8.202E-09, 7.041E-09, 6.074E-09, 5.172E-09, 4.468E-09,
3699 3.913E-09, 3.414E-09, 2.975E-09, 2.650E-09, 2.406E-09,
3700 2.173E-09, 2.009E-09, 1.861E-09, 1.727E-09, 1.612E-09,
3701 1.514E-09, 1.430E-09, 1.362E-09, 1.333E-09, 1.288E-09,
3702 1.249E-09, 1.238E-09, 1.228E-09, 1.217E-09, 1.202E-09,
3703 1.209E-09, 1.177E-09, 1.157E-09, 1.165E-09, 1.142E-09,
3704 1.131E-09, 1.138E-09, 1.127E-09, 1.131E-09, 1.039E-09,
3705 9.049E-10, 8.118E-10, 6.369E-10, 5.329E-10, 4.016E-10,
3706 3.329E-10, 2.698E-10, 2.539E-10, 2.236E-10, 1.814E-10,
3707 1.560E-10, 1.385E-10, 1.135E-10, 9.918E-11, 8.391E-11,
3708 7.496E-11, 6.715E-11, 6.105E-11, 5.585E-11, 5.160E-11,
3709 4.764E-11, 4.401E-11, 4.099E-11, 3.816E-11, 3.565E-11,
3710 3.342E-11, 3.142E-11, 2.954E-11, 2.776E-11, 2.624E-11,
3711 2.485E-11, 2.355E-11, 2.237E-11, 2.128E-11, 2.031E-11,
3712 1.942E-11, 1.859E-11, 1.785E-11, 1.718E-11, 1.658E-11,
3713 1.603E-11, 1.555E-11, 1.514E-11, 1.477E-11, 1.447E-11,
3714 1.423E-11, 1.405E-11, 1.393E-11, 1.388E-11, 1.388E-11,
3715 1.396E-11, 1.409E-11, 1.430E-11, 1.459E-11, 1.494E-11,
3716 1.538E-11, 1.590E-11, 1.650E-11, 1.719E-11, 1.800E-11,
3717 1.890E-11, 1.996E-11, 2.118E-11, 2.247E-11, 2.391E-11,
3718 2.563E-11, 2.695E-11, 2.866E-11, 3.096E-11, 3.392E-11,
3719 3.806E-11, 4.261E-11, 4.748E-11, 5.323E-11, 5.935E-11,
3720 6.619E-11, 7.418E-11, 8.294E-11, 9.260E-11, 1.039E-10,
3721 1.156E-10, 1.297E-10, 1.460E-10, 1.641E-10, 1.858E-10,
3722 2.100E-10, 2.383E-10, 2.724E-10, 3.116E-10, 3.538E-10,
3723 4.173E-10, 4.727E-10, 5.503E-10, 6.337E-10, 7.320E-10,
3724 8.298E-10, 9.328E-10, 1.059E-09, 1.176E-09, 1.328E-09,
3725 1.445E-09, 1.593E-09, 1.770E-09, 1.954E-09, 2.175E-09,
3726 2.405E-09, 2.622E-09, 2.906E-09, 3.294E-09, 3.713E-09,
3727 3.980E-09, 4.384E-09, 4.987E-09, 5.311E-09, 5.874E-09,
3728 6.337E-09, 7.027E-09, 7.390E-09, 7.769E-09, 8.374E-09,
3729 8.605E-09, 9.165E-09, 9.415E-09, 9.511E-09, 9.704E-09,
3730 9.588E-09, 9.450E-09, 9.086E-09, 8.798E-09, 8.469E-09,
3731 7.697E-09, 7.168E-09, 6.255E-09, 5.772E-09, 4.970E-09,
3732 4.271E-09, 3.653E-09, 3.154E-09, 2.742E-09, 2.435E-09,
3733 2.166E-09, 1.936E-09, 1.731E-09, 1.556E-09, 1.399E-09,
3734 1.272E-09, 1.157E-09, 1.066E-09, 9.844E-10, 9.258E-10,
3735 8.787E-10, 8.421E-10, 8.083E-10, 8.046E-10, 8.067E-10,
3736 8.181E-10, 8.325E-10, 8.517E-10, 9.151E-10, 9.351E-10,
3737 9.677E-10, 1.071E-09, 1.126E-09, 1.219E-09, 1.297E-09,
3738 1.408E-09, 1.476E-09, 1.517E-09, 1.600E-09, 1.649E-09,
3739 1.678E-09, 1.746E-09, 1.764E-09, 1.741E-09, 1.703E-09,
3740 1.506E-09, 1.298E-09, 1.066E-09, 8.872E-10, 7.676E-10,
3741 5.313E-10, 4.978E-10, 4.163E-10, 3.527E-10, 2.929E-10,
3742 2.372E-10, 1.992E-10, 1.767E-10, 1.588E-10, 1.419E-10,
3743 1.275E-10, 1.186E-10, 1.082E-10, 9.390E-11, 8.110E-11,
3744 7.039E-11, 6.366E-11, 5.968E-11, 5.547E-11, 5.202E-11,
3745 4.730E-11, 4.240E-11, 3.969E-11, 3.535E-11, 3.219E-11,
3746 2.916E-11, 2.677E-11, 2.445E-11, 2.279E-11, 2.107E-11,
3747 1.950E-11, 1.830E-11, 1.716E-11, 1.617E-11, 1.536E-11,
3748 1.463E-11, 1.394E-11, 1.331E-11, 1.273E-11, 1.220E-11,
3749 1.171E-11, 1.129E-11, 1.091E-11, 1.057E-11, 1.028E-11,
3750 1.002E-11, 9.801E-12, 9.618E-12, 9.471E-12, 9.371E-12,
3751 9.313E-12, 9.311E-12, 9.387E-12, 9.547E-12, 9.799E-12,
3752 1.013E-11, 1.082E-11, 1.141E-11, 1.220E-11, 1.352E-11,
3753 1.538E-11, 1.732E-11, 1.978E-11, 2.366E-11, 2.896E-11,
3754 3.601E-11, 4.259E-11, 4.737E-11, 5.089E-11, 5.592E-11,
3755 6.109E-11, 6.628E-11, 7.381E-11, 8.088E-11, 8.966E-11,
3756 1.045E-10, 1.120E-10, 1.287E-10, 1.486E-10, 1.662E-10,
3757 1.866E-10, 2.133E-10, 2.524E-10, 2.776E-10, 3.204E-10,
3758 3.559E-10, 4.028E-10, 4.448E-10, 4.882E-10, 5.244E-10,
3759 5.605E-10, 6.018E-10, 6.328E-10, 6.579E-10, 6.541E-10,
3760 7.024E-10, 7.074E-10, 7.068E-10, 7.009E-10, 6.698E-10,
3761 6.545E-10, 6.209E-10, 5.834E-10, 5.412E-10, 5.001E-10,
3762 4.231E-10, 3.727E-10, 3.211E-10, 2.833E-10, 2.447E-10,
3763 2.097E-10, 1.843E-10, 1.639E-10, 1.449E-10, 1.270E-10,
3764 1.161E-10, 1.033E-10, 9.282E-11, 8.407E-11, 7.639E-11,
3765 7.023E-11, 6.474E-11, 6.142E-11, 5.760E-11, 5.568E-11,
3766 5.472E-11, 5.390E-11, 5.455E-11, 5.540E-11, 5.587E-11,
3767 6.230E-11, 6.490E-11, 6.868E-11, 7.382E-11, 8.022E-11,
3768 8.372E-11, 9.243E-11, 1.004E-10, 1.062E-10, 1.130E-10,
3769 1.176E-10, 1.244E-10, 1.279E-10, 1.298E-10, 1.315E-10,
3770 1.308E-10, 1.284E-10, 1.138E-10, 9.898E-11, 7.972E-11,
3771 6.261E-11, 4.860E-11, 3.916E-11, 3.416E-11, 3.043E-11,
3772 2.277E-11, 1.999E-11, 1.632E-11, 1.326E-11, 1.127E-11,
3773 9.680E-12, 8.474E-12, 7.490E-12, 6.688E-12, 6.012E-12,
3774 5.468E-12, 5.010E-12, 4.623E-12, 4.285E-12, 3.994E-12,
3775 3.741E-12, 3.519E-12, 3.326E-12, 3.157E-12, 3.011E-12,
3776 2.885E-12, 2.773E-12, 2.683E-12, 2.604E-12, 2.542E-12,
3777 2.493E-12, 2.458E-12, 2.434E-12, 2.423E-12, 2.424E-12,
3778 2.440E-12, 2.465E-12, 2.506E-12, 2.560E-12, 2.626E-12,
3779 2.707E-12, 2.803E-12, 2.914E-12, 3.039E-12, 3.184E-12,
3780 3.345E-12, 3.501E-12, 3.670E-12, 3.910E-12, 4.273E-12,
3781 4.770E-12, 5.347E-12, 5.978E-12, 6.682E-12, 7.467E-12, //end diff section
3782 8.340E-12, 9.293E-12, 1.035E-11, 1.152E-11, 1.285E-11,
3783 1.428e-11, 1.586e-11, 1.764e-11, 1.972e-11, 2.214e-11,
3784 2.478e-11, 2.776e-11, 3.151e-11, 3.591e-11, 4.103e-11,
3785 4.660e-11, 5.395e-11, 6.306e-11, 7.172e-11, 8.358e-11,
3786 9.670e-11, 1.110e-10, 1.325e-10, 1.494e-10, 1.736e-10,
3787 2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10,
3788 3.727e-10, 4.373e-10, 4.838e-10, 5.483e-10, 6.006e-10,
3789 6.535e-10, 6.899e-10, 7.687e-10, 8.444e-10, 8.798e-10,
3790 9.135e-10, 9.532e-10, 9.757e-10, 9.968e-10, 1.006e-09,
3791 9.949e-10, 9.789e-10, 9.564e-10, 9.215e-10, 8.510e-10,
3792 8.394e-10, 7.707e-10, 7.152e-10, 6.274e-10, 5.598e-10,
3793 5.028e-10, 4.300e-10, 3.710e-10, 3.245e-10, 2.809e-10,
3794 2.461e-10, 2.154e-10, 1.910e-10, 1.685e-10, 1.487e-10,
3795 1.313e-10, 1.163e-10, 1.031e-10, 9.172e-11, 8.221e-11,
3796 7.382e-11, 6.693e-11, 6.079e-11, 5.581e-11, 5.167e-11,
3797 4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11, 3.949e-11,
3798 3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11,
3799 4.240e-11, 4.487e-11, 4.806e-11, 5.133e-11, 5.518e-11,
3800 5.919e-11, 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11,
3801 9.252e-11, 9.727e-11, 1.045e-10, 1.117e-10, 1.200e-10,
3802 1.275e-10, 1.341e-10, 1.362e-10, 1.438e-10, 1.450e-10,
3803 1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10, 1.301e-10,
3804 1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11,
3805 7.618e-11, 6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11,
3806 3.773e-11, 3.331e-11, 2.958e-11, 2.629e-11, 2.316e-11,
3807 2.073e-11, 1.841e-11, 1.635e-11, 1.464e-11, 1.310e-11,
3808 1.160e-11, 1.047e-11, 9.408e-12, 8.414e-12, 7.521e-12,
3809 6.705e-12, 5.993e-12, 5.371e-12, 4.815e-12, 4.338e-12,
3810 3.921e-12, 3.567e-12, 3.265e-12, 3.010e-12, 2.795e-12,
3811 2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12,
3812 2.165e-12, 2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12,
3813 2.502e-12, 2.682e-12, 2.908e-12, 3.187e-12, 3.533e-12,
3814 3.946e-12, 4.418e-12, 5.013e-12, 5.708e-12, 6.379e-12,
3815 7.430e-12, 8.390e-12, 9.510e-12, 1.078e-11, 1.259e-11,
3816 1.438e-11, 1.630e-11, 1.814e-11, 2.055e-11, 2.348e-11,
3817 2.664e-11, 2.956e-11, 3.300e-11, 3.677e-11, 4.032e-11,
3818 4.494e-11, 4.951e-11, 5.452e-11, 6.014e-11, 6.500e-11,
3819 6.915e-11, 7.450e-11, 7.971e-11, 8.468e-11, 8.726e-11,
3820 8.995e-11, 9.182e-11, 9.509e-11, 9.333e-11, 9.386e-11,
3821 9.457e-11, 9.210e-11, 9.019e-11, 8.680e-11, 8.298e-11,
3822 7.947e-11, 7.460e-11, 7.082e-11, 6.132e-11, 5.855e-11,
3823 5.073e-11, 4.464e-11, 3.825e-11, 3.375e-11, 2.911e-11,
3824 2.535e-11, 2.160e-11, 1.907e-11, 1.665e-11, 1.463e-11,
3825 1.291e-11, 1.133e-11, 9.997e-12, 8.836e-12, 7.839e-12,
3826 6.943e-12, 6.254e-12, 5.600e-12, 5.029e-12, 4.529e-12,
3827 4.102e-12, 3.737e-12, 3.428e-12, 3.169e-12, 2.959e-12,
3828 2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
3829 2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12,
3830 3.631e-12, 3.979e-12, 4.248e-12, 4.817e-12, 5.266e-12,
3831 5.836e-12, 6.365e-12, 6.807e-12, 7.470e-12, 7.951e-12,
3832 8.636e-12, 8.972e-12, 9.314e-12, 9.445e-12, 1.003e-11,
3833 1.013e-11, 9.937e-12, 9.729e-12, 9.064e-12, 9.119e-12,
3834 9.124e-12, 8.704e-12, 8.078e-12, 7.470e-12, 6.329e-12,
3835 5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12,
3836 2.731e-12, 2.415e-12, 2.150e-12, 1.926e-12, 1.737e-12,
3837 1.578e-12, 1.447e-12, 1.340e-12, 1.255e-12, 1.191e-12,
3838 1.146e-12, 1.121e-12, 1.114e-12, 1.126e-12, 1.156e-12,
3839 1.207e-12, 1.278e-12, 1.372e-12, 1.490e-12, 1.633e-12,
3840 1.805e-12, 2.010e-12, 2.249e-12, 2.528e-12, 2.852e-12,
3841 3.228e-12, 3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12,
3842 6.176e-12, 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11,
3843 1.276e-11, 1.417e-11, 1.615e-11, 1.840e-11, 2.155e-11,
3844 2.429e-11, 2.826e-11, 3.222e-11, 3.664e-11, 4.140e-11,
3845 4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11, 8.316e-11,
3846 9.242e-11, 1.070e-10, 1.223e-10, 1.341e-10, 1.553e-10,
3847 1.703e-10, 1.900e-10, 2.022e-10, 2.233e-10, 2.345e-10,
3848 2.438e-10, 2.546e-10, 2.599e-10, 2.661e-10, 2.703e-10,
3849 2.686e-10, 2.662e-10, 2.560e-10, 2.552e-10, 2.378e-10,
3850 2.252e-10, 2.146e-10, 1.885e-10, 1.668e-10, 1.441e-10,
3851 1.295e-10, 1.119e-10, 9.893e-11, 8.687e-11, 7.678e-11,
3852 6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11, 3.997e-11,
3853 3.511e-11};
3854
3855
3856// H2O foreign continuum parameters at all temperatures
3857// date of last update: 10/29/18
3858// units of (CM**3/MOL)*1.E-20
3859const Numeric FH2O_ckd_mt_320_v1 = -20.0;
3860 const Numeric FH2O_ckd_mt_320_v2 = 20000.0;
3861const Numeric FH2O_ckd_mt_320_dv = 10.0;
3862const int FH2O_ckd_mt_320_npt = 2003;
3863const double FH2O_ckd_mt_320[FH2O_ckd_mt_320_npt+addF77fields] = {
3864 0.000e0, 1.205e-02, 1.126e-02,
3865 1.095e-02, 1.126e-02, 1.205e-02, 1.322e-02, 1.430e-02,
3866 1.506e-02, 1.548e-02, 1.534e-02, 1.486e-02, 1.373e-02,
3867 1.262e-02, 1.134e-02, 1.001e-02, 8.702e-03, 7.475e-03,
3868 6.481e-03, 5.480e-03, 4.600e-03, 3.833e-03, 3.110e-03,
3869 2.543e-03, 2.049e-03, 1.680e-03, 1.374e-03, 1.046e-03,
3870 8.193e-04, 6.267e-04, 4.968e-04, 3.924e-04, 2.983e-04,
3871 2.477e-04, 1.997e-04, 1.596e-04, 1.331e-04, 1.061e-04,
3872 8.942e-05, 7.168e-05, 5.887e-05, 4.848e-05, 3.817e-05,
3873 3.170e-05, 2.579e-05, 2.162e-05, 1.768e-05, 1.490e-05,
3874 1.231e-05, 1.013e-05, 8.555e-06, 7.328e-06, 6.148e-06,
3875 5.207e-06, 4.387e-06, 3.741e-06, 3.220e-06, 2.753e-06,
3876 2.346e-06, 1.985e-06, 1.716e-06, 1.475e-06, 1.286e-06,
3877 1.122e-06, 9.661e-07, 8.284e-07, 7.057e-07, 6.119e-07,
3878 5.290e-07, 4.571e-07, 3.948e-07, 3.432e-07, 2.983e-07,
3879 2.589e-07, 2.265e-07, 1.976e-07, 1.704e-07, 1.456e-07,
3880 1.260e-07, 1.101e-07, 9.648e-08, 8.415e-08, 7.340e-08,
3881 6.441e-08, 5.643e-08, 4.940e-08, 4.276e-08, 3.703e-08,
3882 3.227e-08, 2.825e-08, 2.478e-08, 2.174e-08, 1.898e-08,
3883 1.664e-08, 1.458e-08, 1.278e-08, 1.126e-08, 9.891e-09,
3884 8.709e-09, 7.652e-09, 6.759e-09, 5.975e-09, 5.310e-09,
3885 4.728e-09, 4.214e-09, 3.792e-09, 3.463e-09, 3.226e-09,
3886 2.992e-09, 2.813e-09, 2.749e-09, 2.809e-09, 2.913e-09,
3887 3.037e-09, 3.413e-09, 3.738e-09, 4.189e-09, 4.808e-09,
3888 5.978e-09, 7.088e-09, 8.071e-09, 9.610e-09, 1.210e-08,
3889 1.500e-08, 1.764e-08, 2.221e-08, 2.898e-08, 3.948e-08,
3890 5.068e-08, 6.227e-08, 7.898e-08, 1.033e-07, 1.437e-07,
3891 1.889e-07, 2.589e-07, 3.590e-07, 4.971e-07, 7.156e-07,
3892 9.983e-07, 1.381e-06, 1.929e-06, 2.591e-06, 3.453e-06,
3893 4.570e-06, 5.930e-06, 7.552e-06, 9.556e-06, 1.183e-05,
3894 1.425e-05, 1.681e-05, 1.978e-05, 2.335e-05, 2.668e-05,
3895 3.022e-05, 3.371e-05, 3.715e-05, 3.967e-05, 4.060e-05,
3896 4.010e-05, 3.809e-05, 3.491e-05, 3.155e-05, 2.848e-05,
3897 2.678e-05, 2.660e-05, 2.811e-05, 3.071e-05, 3.294e-05,
3898 3.459e-05, 3.569e-05, 3.560e-05, 3.434e-05, 3.186e-05,
3899 2.916e-05, 2.622e-05, 2.275e-05, 1.918e-05, 1.620e-05,
3900 1.373e-05, 1.182e-05, 1.006e-05, 8.556e-06, 7.260e-06,
3901 6.110E-06, 5.040E-06, 4.230E-06, 3.456E-06, 2.903E-06,
3902 2.486E-06, 2.039E-06, 1.672E-06, 1.285E-06, 1.054E-06, // begin section diff to MT 1.00
3903 8.302E-07, 6.667E-07, 5.503E-07, 4.562E-07, 3.948E-07,
3904 3.198E-07, 2.586E-07, 2.225E-07, 1.807E-07, 1.530E-07,
3905 1.294E-07, 1.126E-07, 9.604E-08, 7.850E-08, 6.813E-08,
3906 5.583E-08, 4.690E-08, 3.996E-08, 3.373E-08, 2.930E-08,
3907 2.417E-08, 2.061E-08, 1.743E-08, 1.475E-08, 1.273E-08,
3908 1.084E-08, 9.368E-09, 7.985E-09, 6.785E-09, 5.804E-09,
3909 4.975E-09, 4.311E-09, 3.738E-09, 3.275E-09, 2.847E-09,
3910 2.469E-09, 2.149E-09, 1.884E-09, 1.631E-09, 1.393E-09,
3911 1.201E-09, 1.027E-09, 8.807E-10, 7.521E-10, 6.436E-10,
3912 5.509E-10, 4.729E-10, 4.055E-10, 3.490E-10, 3.006E-10,
3913 2.599E-10, 2.246E-10, 1.942E-10, 1.685E-10, 1.464E-10,
3914 1.273E-10, 1.115E-10, 9.794E-11, 8.729E-11, 7.893E-11,
3915 7.313E-11, 7.069E-11, 7.190E-11, 7.828E-11, 9.295E-11,
3916 1.174E-10, 1.578E-10, 2.184E-10, 3.053E-10, 4.212E-10,
3917 5.733E-10, 7.497E-10, 9.487E-10, 1.153E-09, 1.343E-09,
3918 1.503E-09, 1.623E-09, 1.696E-09, 1.746E-09, 1.789E-09,
3919 1.852E-09, 1.862E-09, 1.886E-09, 1.912E-09, 1.942E-09,
3920 1.938E-09, 1.914E-09, 1.898E-09, 1.864E-09, 1.770E-09,
3921 1.635E-09, 1.464E-09, 1.279E-09, 1.099E-09, 9.528E-10,
3922 8.433E-10, 7.794E-10, 7.793E-10, 8.241E-10, 9.417E-10,
3923 1.179E-09, 1.616E-09, 2.144E-09, 2.992E-09, 4.344E-09,
3924 6.415E-09, 9.242E-09, 1.310E-08, 1.847E-08, 2.567E-08,
3925 3.390E-08, 4.357E-08, 5.301E-08, 6.364E-08, 7.438E-08,
3926 8.381E-08, 9.294E-08, 1.013E-07, 1.103E-07, 1.170E-07,
3927 1.200E-07, 1.190E-07, 1.133E-07, 1.040E-07, 9.475E-08,
3928 8.601E-08, 8.074E-08, 8.023E-08, 8.473E-08, 9.256E-08,
3929 9.989E-08, 1.056E-07, 1.079E-07, 1.079E-07, 1.049E-07,
3930 1.000E-07, 9.350E-08, 8.662E-08, 7.880E-08, 7.137E-08,
3931 6.438E-08, 5.706E-08, 5.132E-08, 4.815E-08, 4.736E-08,
3932 4.709E-08, 4.918E-08, 5.227E-08, 5.603E-08, 6.023E-08,
3933 6.567E-08, 7.403E-08, 8.695E-08, 9.929E-08, 1.163E-07,
3934 1.379E-07, 1.658E-07, 2.010E-07, 2.425E-07, 2.920E-07,
3935 3.562E-07, 4.274E-07, 5.173E-07, 6.285E-07, 7.787E-07,
3936 9.563E-07, 1.194E-06, 1.517E-06, 1.934E-06, 2.511E-06,
3937 3.197E-06, 4.024E-06, 4.981E-06, 6.090E-06, 7.229E-06,
3938 8.439E-06, 9.367E-06, 1.016E-05, 1.057E-05, 1.088E-05,
3939 1.108E-05, 1.129E-05, 1.159E-05, 1.190E-05, 1.210E-05,
3940 1.210E-05, 1.200E-05, 1.190E-05, 1.180E-05, 1.190E-05,
3941 1.230E-05, 1.280E-05, 1.300E-05, 1.290E-05, 1.210E-05,
3942 1.090E-05, 9.440E-06, 7.790E-06, 6.220E-06, 4.640E-06,
3943 3.400E-06, 2.470E-06, 1.780E-06, 1.290E-06, 9.260E-07,
3944 7.000E-07, 5.360E-07, 4.260E-07, 3.410E-07, 2.790E-07,
3945 2.360E-07, 2.010E-07, 1.750E-07, 1.520E-07, 1.330E-07,
3946 1.160E-07, 1.010E-07, 8.830E-08, 7.710E-08, 6.770E-08,
3947 6.010E-08, 5.340E-08, 4.720E-08, 4.200E-08, 3.690E-08,
3948 3.270E-08, 2.920E-08, 2.570E-08, 2.270E-08, 2.000E-08,
3949 1.770E-08, 1.560E-08, 1.370E-08, 1.200E-08, 1.050E-08,
3950 9.180E-09, 8.000E-09, 6.980E-09, 6.080E-09, 5.270E-09,
3951 4.560E-09, 3.940E-09, 3.400E-09, 2.930E-09, 2.510E-09,
3952 2.150E-09, 1.840E-09, 1.570E-09, 1.340E-09, 1.140E-09,
3953 9.660E-10, 8.190E-10, 6.930E-10, 5.860E-10, 4.950E-10,
3954 4.190E-10, 3.560E-10, 3.060E-10, 2.670E-10, 2.410E-10,
3955 2.260E-10, 2.250E-10, 2.360E-10, 2.570E-10, 2.840E-10,
3956 3.180E-10, 3.490E-10, 3.710E-10, 3.810E-10, 3.840E-10,
3957 3.800E-10, 3.590E-10, 3.370E-10, 3.080E-10, 2.770E-10,
3958 2.470E-10, 2.200E-10, 2.050E-10, 1.990E-10, 2.030E-10,
3959 2.130E-10, 2.250E-10, 2.340E-10, 2.410E-10, 2.470E-10,
3960 2.480E-10, 2.500E-10, 2.520E-10, 2.580E-10, 2.640E-10,
3961 2.690E-10, 2.790E-10, 2.950E-10, 3.130E-10, 3.340E-10,
3962 3.570E-10, 3.840E-10, 4.200E-10, 4.660E-10, 5.210E-10,
3963 5.960E-10, 6.890E-10, 8.010E-10, 9.320E-10, 1.080E-09,
3964 1.240E-09, 1.450E-09, 1.710E-09, 2.010E-09, 2.360E-09,
3965 2.820E-09, 3.380E-09, 4.010E-09, 4.790E-09, 5.740E-09,
3966 6.920E-09, 8.338E-09, 1.015E-08, 1.246E-08, 1.512E-08,
3967 1.851E-08, 2.320E-08, 2.988E-08, 3.989E-08, 5.351E-08,
3968 7.256E-08, 1.011E-07, 1.388E-07, 1.914E-07, 2.512E-07,
3969 3.257E-07, 4.075E-07, 4.991E-07, 5.914E-07, 6.638E-07,
3970 7.160E-07, 7.450E-07, 7.590E-07, 7.540E-07, 7.470E-07,
3971 7.530E-07, 7.940E-07, 8.460E-07, 8.950E-07, 9.360E-07,
3972 9.840E-07, 1.020E-06, 1.050E-06, 1.060E-06, 1.070E-06,
3973 1.070E-06, 1.040E-06, 9.790E-07, 8.800E-07, 7.660E-07,
3974 6.380E-07, 5.142E-07, 3.982E-07, 2.940E-07, 2.177E-07,
3975 1.612E-07, 1.185E-07, 8.966E-08, 6.735E-08, 5.219E-08,
3976 4.140E-08, 3.403E-08, 2.811E-08, 2.358E-08, 1.969E-08,
3977 1.684E-08, 1.462E-08, 1.285E-08, 1.134E-08, 9.916E-09,
3978 8.650E-09, 7.550E-09, 6.620E-09, 5.830E-09, 5.140E-09,
3979 4.510E-09, 3.980E-09, 3.530E-09, 3.120E-09, 2.780E-09,
3980 2.480E-09, 2.180E-09, 1.930E-09, 1.700E-09, 1.500E-09,
3981 1.330E-09, 1.160E-09, 1.030E-09, 9.010E-10, 7.860E-10,
3982 6.880E-10, 6.020E-10, 5.250E-10, 4.570E-10, 3.960E-10,
3983 3.440E-10, 2.980E-10, 2.570E-10, 2.210E-10, 1.900E-10,
3984 1.630E-10, 1.400E-10, 1.210E-10, 1.040E-10, 9.090E-11,
3985 7.960E-11, 7.050E-11, 6.300E-11, 5.670E-11, 5.090E-11,
3986 4.550E-11, 4.040E-11, 3.550E-11, 3.090E-11, 2.640E-11,
3987 2.260E-11, 1.900E-11, 1.600E-11, 1.340E-11, 1.140E-11,
3988 1.010E-11, 9.170E-12, 8.690E-12, 8.470E-12, 8.330E-12,
3989 8.200E-12, 8.040E-12, 7.950E-12, 7.980E-12, 8.250E-12,
3990 8.470E-12, 8.740E-12, 8.870E-12, 8.920E-12, 8.710E-12,
3991 8.300E-12, 7.890E-12, 7.590E-12, 7.500E-12, 7.630E-12,
3992 8.060E-12, 8.890E-12, 1.000E-11, 1.140E-11, 1.280E-11,
3993 1.450E-11, 1.640E-11, 1.870E-11, 2.120E-11, 2.440E-11,
3994 2.850E-11, 3.310E-11, 3.830E-11, 4.460E-11, 5.230E-11,
3995 6.150E-11, 7.350E-11, 8.840E-11, 1.070E-10, 1.290E-10,
3996 1.590E-10, 1.990E-10, 2.490E-10, 3.120E-10, 3.910E-10,
3997 4.980E-10, 6.280E-10, 7.860E-10, 9.660E-10, 1.160E-09,
3998 1.410E-09, 1.700E-09, 2.060E-09, 2.540E-09, 3.170E-09,
3999 4.080E-09, 5.240E-09, 6.800E-09, 8.920E-09, 1.130E-08,
4000 1.400E-08, 1.700E-08, 2.050E-08, 2.370E-08, 2.610E-08,
4001 2.770E-08, 2.850E-08, 2.860E-08, 2.780E-08, 2.720E-08,
4002 2.740E-08, 2.830E-08, 3.010E-08, 3.220E-08, 3.520E-08,
4003 3.780E-08, 4.030E-08, 4.210E-08, 4.330E-08, 4.390E-08,
4004 4.340E-08, 4.250E-08, 4.070E-08, 3.880E-08, 3.670E-08,
4005 3.560E-08, 3.520E-08, 3.670E-08, 4.020E-08, 4.640E-08,
4006 5.630E-08, 6.890E-08, 8.820E-08, 1.110E-07, 1.410E-07,
4007 1.730E-07, 2.120E-07, 2.570E-07, 2.990E-07, 3.450E-07,
4008 3.790E-07, 4.090E-07, 4.230E-07, 4.300E-07, 4.330E-07,
4009 4.350E-07, 4.440E-07, 4.540E-07, 4.620E-07, 4.670E-07,
4010 4.710E-07, 4.770E-07, 4.930E-07, 5.190E-07, 5.540E-07,
4011 5.900E-07, 6.120E-07, 6.150E-07, 5.810E-07, 5.210E-07,
4012 4.510E-07, 3.690E-07, 2.890E-07, 2.140E-07, 1.550E-07,
4013 1.110E-07, 7.780E-08, 5.460E-08, 3.930E-08, 2.930E-08,
4014 2.260E-08, 1.820E-08, 1.520E-08, 1.310E-08, 1.150E-08,
4015 1.020E-08, 9.010E-09, 7.950E-09, 7.040E-09, 6.200E-09,
4016 5.490E-09, 4.860E-09, 4.340E-09, 3.880E-09, 3.460E-09,
4017 3.070E-09, 2.710E-09, 2.380E-09, 2.090E-09, 1.820E-09,
4018 1.590E-09, 1.380E-09, 1.200E-09, 1.040E-09, 9.080E-10,
4019 7.880E-10, 6.850E-10, 5.960E-10, 5.200E-10, 4.530E-10,
4020 3.940E-10, 3.430E-10, 2.970E-10, 2.580E-10, 2.230E-10,
4021 1.920E-10, 1.660E-10, 1.430E-10, 1.240E-10, 1.060E-10,
4022 9.100E-11, 7.790E-11, 6.650E-11, 5.680E-11, 4.840E-11,
4023 4.110E-11, 3.510E-11, 2.990E-11, 2.540E-11, 2.170E-11,
4024 1.860E-11, 1.590E-11, 1.370E-11, 1.180E-11, 1.040E-11,
4025 9.240E-12, 8.390E-12, 7.860E-12, 7.700E-12, 7.850E-12,
4026 8.410E-12, 9.620E-12, 1.160E-11, 1.470E-11, 1.940E-11,
4027 2.580E-11, 3.510E-11, 4.730E-11, 6.260E-11, 7.980E-11,
4028 9.950E-11, 1.210E-10, 1.400E-10, 1.580E-10, 1.770E-10,
4029 1.980E-10, 2.220E-10, 2.470E-10, 2.790E-10, 3.140E-10,
4030 3.550E-10, 4.000E-10, 4.510E-10, 5.150E-10, 5.730E-10,
4031 6.250E-10, 6.650E-10, 6.910E-10, 6.980E-10, 6.830E-10,
4032 6.670E-10, 6.570E-10, 6.600E-10, 6.840E-10, 7.390E-10,
4033 8.040E-10, 8.730E-10, 9.440E-10, 9.950E-10, 1.030E-09,
4034 1.010E-09, 9.800E-10, 9.320E-10, 8.670E-10, 7.990E-10,
4035 7.290E-10, 6.670E-10, 6.140E-10, 5.780E-10, 5.650E-10,
4036 5.650E-10, 5.880E-10, 6.430E-10, 7.500E-10, 9.160E-10,
4037 1.160E-09, 1.510E-09, 1.990E-09, 2.700E-09, 3.660E-09,
4038 4.950E-09, 6.410E-09, 8.160E-09, 1.020E-08, 1.240E-08,
4039 1.460E-08, 1.640E-08, 1.790E-08, 1.870E-08, 1.930E-08,
4040 1.930E-08, 1.930E-08, 1.950E-08, 2.070E-08, 2.230E-08,
4041 2.340E-08, 2.440E-08, 2.550E-08, 2.670E-08, 2.760E-08,
4042 2.810E-08, 2.900E-08, 2.940E-08, 2.910E-08, 2.770E-08,
4043 2.520E-08, 2.210E-08, 1.840E-08, 1.490E-08, 1.150E-08,
4044 8.640E-09, 6.440E-09, 4.790E-09, 3.640E-09, 2.750E-09,
4045 2.140E-09, 1.750E-09, 1.480E-09, 1.300E-09, 1.160E-09,
4046 1.050E-09, 9.460E-10, 8.550E-10, 7.660E-10, 6.790E-10,
4047 6.010E-10, 5.300E-10, 4.670E-10, 4.130E-10, 3.670E-10,
4048 3.290E-10, 2.920E-10, 2.570E-10, 2.270E-10, 1.960E-10,
4049 1.700E-10, 1.470E-10, 1.270E-10, 1.100E-10, 9.190E-11,
4050 7.790E-11, 6.590E-11, 5.610E-11, 4.810E-11, 4.070E-11,
4051 3.540E-11, 3.040E-11, 2.620E-11, 2.300E-11, 1.970E-11,
4052 1.710E-11, 1.480E-11, 1.280E-11, 1.100E-11, 9.440E-12,
4053 8.080E-12, 6.940E-12, 5.930E-12, 5.060E-12, 4.310E-12,
4054 3.660E-12, 3.120E-12, 2.670E-12, 2.280E-12, 1.950E-12,
4055 1.670E-12, 1.430E-12, 1.220E-12, 1.050E-12, 9.060E-13,
4056 7.860E-13, 6.870E-13, 6.090E-13, 5.500E-13, 5.070E-13,
4057 4.780E-13, 4.660E-13, 4.770E-13, 5.210E-13, 5.940E-13,
4058 7.440E-13, 9.710E-13, 1.350E-12, 1.870E-12, 2.630E-12,
4059 3.670E-12, 4.950E-12, 6.390E-12, 8.000E-12, 9.880E-12,
4060 1.150E-11, 1.280E-11, 1.370E-11, 1.430E-11, 1.470E-11,
4061 1.450E-11, 1.420E-11, 1.400E-11, 1.410E-11, 1.430E-11,
4062 1.510E-11, 1.650E-11, 1.830E-11, 2.070E-11, 2.250E-11,
4063 2.380E-11, 2.420E-11, 2.380E-11, 2.270E-11, 2.100E-11,
4064 1.980E-11, 1.890E-11, 1.790E-11, 1.720E-11, 1.620E-11,
4065 1.540E-11, 1.430E-11, 1.350E-11, 1.350E-11, 1.420E-11,
4066 1.570E-11, 1.770E-11, 2.060E-11, 2.420E-11, 2.850E-11,
4067 3.430E-11, 4.160E-11, 5.240E-11, 6.820E-11, 8.920E-11,
4068 1.200E-10, 1.600E-10, 2.150E-10, 2.890E-10, 3.770E-10,
4069 4.800E-10, 5.930E-10, 7.250E-10, 8.530E-10, 9.600E-10,
4070 1.040E-09, 1.080E-09, 1.100E-09, 1.090E-09, 1.070E-09,
4071 1.070E-09, 1.120E-09, 1.210E-09, 1.330E-09, 1.480E-09,
4072 1.640E-09, 1.790E-09, 1.940E-09, 2.050E-09, 2.170E-09,
4073 2.280E-09, 2.400E-09, 2.530E-09, 2.740E-09, 3.030E-09,
4074 3.420E-09, 3.870E-09, 4.470E-09, 5.190E-09, 5.910E-09,
4075 6.770E-09, 7.500E-09, 8.280E-09, 8.830E-09, 9.360E-09,
4076 9.910E-09, 1.030E-08, 1.090E-08, 1.140E-08, 1.170E-08,
4077 1.180E-08, 1.180E-08, 1.180E-08, 1.210E-08, 1.260E-08,
4078 1.350E-08, 1.430E-08, 1.490E-08, 1.490E-08, 1.400E-08,
4079 1.250E-08, 1.070E-08, 8.610E-09, 6.570E-09, 4.800E-09,
4080 3.470E-09, 2.470E-09, 1.780E-09, 1.330E-09, 1.050E-09,
4081 8.720E-10, 7.510E-10, 6.760E-10, 6.270E-10, 6.000E-10,
4082 5.990E-10, 6.260E-10, 6.860E-10, 7.580E-10, 8.490E-10,
4083 9.530E-10, 1.050E-09, 1.140E-09, 1.200E-09, 1.250E-09,
4084 1.280E-09, 1.300E-09, 1.310E-09, 1.320E-09, 1.330E-09,
4085 1.330E-09, 1.310E-09, 1.270E-09, 1.230E-09, 1.190E-09,
4086 1.200E-09, 1.250E-09, 1.330E-09, 1.420E-09, 1.480E-09,
4087 1.490E-09, 1.410E-09, 1.260E-09, 1.080E-09, 8.800E-10,
4088 6.780E-10, 4.950E-10, 3.580E-10, 2.540E-10, 1.780E-10,
4089 1.260E-10, 9.280E-11, 7.130E-11, 5.560E-11, 4.500E-11,
4090 3.750E-11, 3.210E-11, 2.760E-11, 2.410E-11, 2.090E-11,
4091 1.820E-11, 1.590E-11, 1.360E-11, 1.180E-11, 1.030E-11,
4092 9.010E-12, 7.940E-12, 6.900E-12, 6.020E-12, 5.260E-12,
4093 4.620E-12, 4.060E-12, 3.550E-12, 3.130E-12, 2.760E-12,
4094 2.430E-12, 2.150E-12, 1.900E-12, 1.680E-12, 1.490E-12,
4095 1.320E-12, 1.170E-12, 1.040E-12, 9.350E-13, 8.470E-13,
4096 7.790E-13, 7.300E-13, 6.960E-13, 6.880E-13, 7.110E-13,
4097 7.600E-13, 8.670E-13, 1.040E-12, 1.310E-12, 1.710E-12,
4098 2.200E-12, 2.930E-12, 3.800E-12, 4.970E-12, 6.220E-12,
4099 7.630E-12, 9.290E-12, 1.100E-11, 1.240E-11, 1.340E-11,
4100 1.410E-11, 1.440E-11, 1.440E-11, 1.390E-11, 1.380E-11,
4101 1.410E-11, 1.490E-11, 1.640E-11, 1.860E-11, 2.110E-11,
4102 2.380E-11, 2.650E-11, 2.890E-11, 3.040E-11, 3.140E-11,
4103 3.290E-11, 3.430E-11, 3.600E-11, 3.910E-11, 4.440E-11,
4104 5.210E-11, 6.430E-11, 8.180E-11, 1.060E-10, 1.400E-10,
4105 1.780E-10, 2.240E-10, 2.770E-10, 3.350E-10, 3.950E-10,
4106 4.470E-10, 4.920E-10, 5.200E-10, 5.390E-10, 5.460E-10,
4107 5.530E-10, 5.660E-10, 6.020E-10, 6.430E-10, 6.680E-10,
4108 6.910E-10, 7.120E-10, 7.420E-10, 7.550E-10, 7.750E-10,
4109 8.090E-10, 8.300E-10, 8.350E-10, 7.950E-10, 7.220E-10,
4110 6.300E-10, 5.230E-10, 4.200E-10, 3.190E-10, 2.390E-10,
4111 1.790E-10, 1.360E-10, 1.050E-10, 8.320E-11, 6.890E-11,
4112 5.890E-11, 5.140E-11, 4.600E-11, 4.190E-11, 3.940E-11,
4113 3.900E-11, 4.070E-11, 4.390E-11, 4.820E-11, 5.290E-11,
4114 5.750E-11, 6.090E-11, 6.280E-11, 6.310E-11, 6.190E-11,
4115 6.040E-11, 5.850E-11, 5.710E-11, 5.680E-11, 5.680E-11,
4116 5.640E-11, 5.580E-11, 5.510E-11, 5.480E-11, 5.450E-11,
4117 5.570E-11, 5.770E-11, 5.960E-11, 6.050E-11, 5.890E-11,
4118 5.430E-11, 4.770E-11, 4.020E-11, 3.250E-11, 2.500E-11,
4119 1.820E-11, 1.310E-11, 9.320E-12, 6.580E-12, 4.640E-12,
4120 3.350E-12, 2.530E-12, 1.960E-12, 1.580E-12, 1.310E-12,
4121 1.110E-12, 9.580E-13, 8.320E-13, 7.310E-13, 6.430E-13,
4122 5.620E-13, 4.890E-13, 4.270E-13, 3.730E-13, 3.250E-13,
4123 2.840E-13, 2.500E-13, 2.210E-13, 1.950E-13, 1.720E-13,
4124 1.520E-13, 1.340E-13, 1.180E-13, 1.050E-13, 9.260E-14,
4125 8.210E-14, 7.290E-14, 6.480E-14, 5.770E-14, 5.150E-14,
4126 4.620E-14, 4.170E-14, 3.790E-14, 3.490E-14, 3.260E-14,
4127 3.090E-14, 3.000E-14, 2.980E-14, 3.040E-14, 3.200E-14,
4128 3.490E-14, 3.960E-14, 4.680E-14, 5.780E-14, 7.420E-14,
4129 9.800E-14, 1.320E-13, 1.790E-13, 2.230E-13, 2.650E-13,
4130 3.020E-13, 3.380E-13, 3.740E-13, 4.050E-13, 4.420E-13,
4131 4.940E-13, 5.480E-13, 6.110E-13, 6.770E-13, 7.560E-13,
4132 8.490E-13, 9.590E-13, 1.090E-12, 1.270E-12, 1.480E-12,
4133 1.730E-12, 2.080E-12, 2.480E-12, 3.030E-12, 3.880E-12,
4134 4.860E-12, 6.250E-12, 8.050E-12, 1.040E-11, 1.370E-11,
4135 1.750E-11, 2.200E-11, 2.750E-11, 3.350E-11, 4.080E-11,
4136 4.790E-11, 5.440E-11, 5.990E-11, 6.460E-11, 6.820E-11,
4137 7.130E-11, 7.620E-11, 8.360E-11, 9.590E-11, 1.150E-10,
4138 1.380E-10, 1.670E-10, 1.990E-10, 2.350E-10, 2.740E-10,
4139 3.110E-10, 3.510E-10, 3.890E-10, 4.210E-10, 4.490E-10,
4140 4.660E-10, 4.860E-10, 4.960E-10, 5.080E-10, 5.200E-10,
4141 5.290E-10, 5.300E-10, 5.220E-10, 5.160E-10, 5.180E-10,
4142 5.350E-10, 5.680E-10, 6.070E-10, 6.420E-10, 6.600E-10,
4143 6.390E-10, 5.830E-10, 5.030E-10, 4.110E-10, 3.200E-10,
4144 2.350E-10, 1.700E-10, 1.200E-10, 8.540E-11, 6.310E-11,
4145 4.920E-11, 4.010E-11, 3.380E-11, 2.970E-11, 2.710E-11,
4146 2.550E-11, 2.450E-11, 2.420E-11, 2.430E-11, 2.490E-11,
4147 2.600E-11, 2.730E-11, 2.910E-11, 3.160E-11, 3.450E-11,
4148 3.810E-11, 4.140E-11, 4.540E-11, 5.020E-11, 5.480E-11,
4149 6.110E-11, 6.720E-11, 7.370E-11, 7.990E-11, 8.500E-11,
4150 9.010E-11, 9.300E-11, 9.520E-11, 9.640E-11, 9.590E-11,
4151 9.390E-11, 9.140E-11, 8.950E-11, 8.970E-11, 9.300E-11,
4152 9.910E-11, 1.060E-10, 1.120E-10, 1.140E-10, 1.100E-10,
4153 1.000E-10, 8.680E-11, 7.140E-11, 5.610E-11, 4.170E-11,
4154 3.050E-11, 2.180E-11, 1.550E-11, 1.110E-11, 8.290E-12,
4155 6.380E-12, 5.070E-12, 4.200E-12, 3.640E-12, 3.280E-12,
4156 3.030E-12, 2.900E-12, 2.780E-12, 2.670E-12, 2.520E-12,
4157 2.340E-12, 2.150E-12, 1.950E-12, 1.750E-12, 1.540E-12,
4158 1.320E-12, 1.130E-12, 9.550E-13, 7.900E-13, 6.440E-13,
4159 5.180E-13, 4.140E-13, 3.320E-13, 2.670E-13, 2.180E-13,
4160 1.830E-13, 1.560E-13, 1.350E-13, 1.180E-13, 1.050E-13,
4161 9.310E-14, 8.350E-14, 7.550E-14, 6.890E-14, 6.360E-14,
4162 5.960E-14, 5.690E-14, 5.560E-14, 5.600E-14, 5.860E-14,
4163 6.420E-14, 7.330E-14, 8.850E-14, 1.140E-13, 1.490E-13,
4164 1.970E-13, 2.690E-13, 3.610E-13, 4.790E-13, 6.040E-13,
4165 7.510E-13, 9.200E-13, 1.090E-12, 1.260E-12, 1.390E-12,
4166 1.530E-12, 1.640E-12, 1.710E-12, 1.770E-12, 1.880E-12,
4167 2.080E-12, 2.370E-12, 2.820E-12, 3.420E-12, 4.180E-12,
4168 5.180E-12, 6.470E-12, 7.980E-12, 9.970E-12, 1.220E-11,
4169 1.470E-11, 1.750E-11, 2.050E-11, 2.380E-11, 2.660E-11,
4170 2.910E-11, 3.090E-11, 3.210E-11, 3.290E-11, 3.310E-11,
4171 3.370E-11, 3.490E-11, 3.690E-11, 3.820E-11, 3.920E-11,
4172 4.050E-11, 4.170E-11, 4.300E-11, 4.420E-11, 4.610E-11,
4173 4.780E-11, 4.830E-11, 4.690E-11, 4.310E-11, 3.810E-11,
4174 3.210E-11, 2.610E-11, 2.040E-11, 1.560E-11, 1.200E-11,
4175 9.200E-12, 7.100E-12, 5.650E-12, 4.630E-12, 3.860E-12,
4176 3.270E-12, 2.830E-12, 2.480E-12, 2.220E-12, 2.030E-12,
4177 1.910E-12, 1.840E-12, 1.820E-12, 1.820E-12, 1.860E-12,
4178 1.940E-12, 2.110E-12, 2.360E-12, 2.600E-12, 2.940E-12,
4179 3.310E-12, 3.730E-12, 4.170E-12, 4.570E-12, 4.980E-12,
4180 5.260E-12, 5.540E-12, 5.790E-12, 6.050E-12, 6.380E-12,
4181 6.710E-12, 6.930E-12, 7.030E-12, 7.050E-12, 7.050E-12,
4182 7.160E-12, 7.370E-12, 7.790E-12, 8.300E-12, 8.650E-12,
4183 8.760E-12, 8.320E-12, 7.510E-12, 6.480E-12, 5.310E-12,
4184 4.180E-12, 3.070E-12, 2.220E-12, 1.570E-12, 1.090E-12,
4185 7.390E-13, 5.110E-13, 3.660E-13, 2.680E-13, 2.000E-13,
4186 1.560E-13, 1.270E-13, 1.060E-13, 9.050E-14, 7.850E-14,
4187 6.900E-14, 6.100E-14, 5.420E-14, 4.840E-14, 4.320E-14,
4188 3.870E-14, 3.470E-14, 3.120E-14, 2.800E-14, 2.520E-14,
4189 2.270E-14, 2.050E-14, 1.860E-14, 1.690E-14, 1.550E-14,
4190 1.430E-14, 1.330E-14, 1.250E-14, 1.200E-14, 1.160E-14,
4191 1.150E-14, 1.160E-14, 1.190E-14, 1.250E-14, 1.340E-14,
4192 1.450E-14, 1.600E-14, 1.780E-14, 2.010E-14, 2.270E-14,
4193 2.590E-14, 2.960E-14, 3.400E-14, 3.920E-14, 4.530E-14,
4194 5.240E-14, 6.080E-14, 7.090E-14, 8.310E-14, 9.810E-14,
4195 1.170E-13, 1.420E-13, 1.780E-13, 2.250E-13, 2.790E-13,
4196 3.500E-13, 4.400E-13, 5.530E-13, 6.920E-13, 8.920E-13,
4197 1.150E-12, 1.480E-12, 1.920E-12, 2.540E-12, 3.370E-12,
4198 4.370E-12, 5.710E-12, 7.260E-12, 8.980E-12, 1.100E-11,
4199 1.340E-11, 1.590E-11, 1.860E-11, 2.140E-11, 2.400E-11,
4200 2.690E-11, 2.980E-11, 3.330E-11, 3.770E-11, 4.250E-11,
4201 4.750E-11, 5.110E-11, 5.370E-11, 5.560E-11, 5.610E-11,
4202 5.670E-11, 5.680E-11, 5.780E-11, 5.860E-11, 5.910E-11,
4203 5.930E-11, 5.910E-11, 5.920E-11, 5.930E-11, 5.940E-11,
4204 5.870E-11, 5.650E-11, 5.210E-11, 4.540E-11, 3.820E-11,
4205 3.070E-11, 2.370E-11, 1.780E-11, 1.320E-11, 9.820E-12,
4206 7.340E-12, 5.590E-12, 4.330E-12, 3.420E-12, 2.740E-12,
4207 2.230E-12, 1.860E-12, 1.560E-12, 1.350E-12, 1.170E-12,
4208 1.050E-12, 9.540E-13, 8.830E-13, 8.340E-13, 8.100E-13,
4209 8.110E-13, 8.200E-13, 8.460E-13, 8.830E-13, 9.330E-13,
4210 9.920E-13, 1.070E-12, 1.190E-12, 1.350E-12, 1.580E-12,
4211 1.860E-12, 2.170E-12, 2.520E-12, 2.920E-12, 3.360E-12,
4212 3.830E-12, 4.300E-12, 4.830E-12, 5.370E-12, 5.810E-12,
4213 6.230E-12, 6.480E-12, 6.770E-12, 6.990E-12, 7.170E-12,
4214 7.470E-12, 7.660E-12, 7.770E-12, 7.770E-12, 7.720E-12,
4215 7.770E-12, 7.970E-12, 8.400E-12, 8.900E-12, 9.420E-12,
4216 9.710E-12, 9.550E-12, 8.850E-12, 7.680E-12, 6.390E-12,
4217 5.020E-12, 3.740E-12, 2.680E-12, 1.870E-12, 1.330E-12,
4218 9.480E-13, 7.000E-13, 5.370E-13, 4.170E-13, 3.330E-13,
4219 2.760E-13, 2.350E-13, 2.040E-13, 1.780E-13, 1.590E-13,
4220 1.420E-13, 1.230E-13, 1.060E-13, 8.950E-14, 7.450E-14,
4221 6.060E-14, 5.020E-14, 4.220E-14, 3.610E-14, 3.130E-14,
4222 2.750E-14, 2.450E-14, 2.190E-14, 1.970E-14, 1.790E-14,
4223 1.630E-14, 1.490E-14, 1.380E-14, 1.290E-14, 1.220E-14,
4224 1.170E-14, 1.140E-14, 1.140E-14, 1.180E-14, 1.260E-14,
4225 1.410E-14, 1.650E-14, 2.040E-14, 2.650E-14, 3.590E-14,
4226 4.870E-14, 6.410E-14, 8.470E-14, 1.070E-13, 1.320E-13,
4227 1.660E-13, 2.070E-13, 2.620E-13, 3.210E-13, 3.940E-13,
4228 4.840E-13, 5.810E-13, 6.840E-13, 7.730E-13, 8.670E-13,
4229 9.620E-13, 1.060E-12, 1.190E-12, 1.350E-12, 1.560E-12,
4230 1.850E-12, 2.210E-12, 2.660E-12, 3.140E-12, 3.600E-12,
4231 3.990E-12, 4.220E-12, 4.360E-12, 4.350E-12, 4.250E-12,
4232 4.100E-12, 3.990E-12, 3.950E-12, 3.870E-12, 3.830E-12,
4233 3.820E-12, 3.890E-12, 3.980E-12, 4.060E-12, 4.190E-12,
4234 4.220E-12, 4.170E-12, 3.900E-12, 3.500E-12, 3.030E-12,
4235 2.490E-12, 1.990E-12, 1.510E-12, 1.150E-12, 8.680E-13,
4236 6.530E-13, 4.890E-13, 3.780E-13, 2.920E-13, 2.250E-13,
4237 1.740E-13, 1.350E-13, 1.070E-13, 8.540E-14, 7.020E-14,
4238 5.950E-14, 5.130E-14, 4.480E-14, 3.890E-14, 3.340E-14,
4239 2.940E-14, 2.630E-14, 2.420E-14, 2.300E-14, 2.270E-14,
4240 2.370E-14, 2.560E-14, 2.780E-14, 3.160E-14, 3.800E-14,
4241 4.860E-14, 6.250E-14, 8.150E-14, 1.010E-13, 1.240E-13,
4242 1.490E-13, 1.730E-13, 1.990E-13, 2.220E-13, 2.440E-13,
4243 2.610E-13, 2.720E-13, 2.850E-13, 2.940E-13, 3.100E-13,
4244 3.290E-13, 3.500E-13, 3.620E-13, 3.660E-13, 3.700E-13,
4245 3.720E-13, 3.830E-13, 4.010E-13, 4.260E-13, 4.510E-13,
4246 4.640E-13, 4.490E-13, 4.050E-13, 3.450E-13, 2.790E-13,
4247 2.120E-13, 1.460E-13, 9.670E-14, 6.180E-14, 3.980E-14,
4248 2.630E-14, 1.810E-14, 1.320E-14, 1.030E-14, 8.420E-15,
4249 7.220E-15, 6.390E-15, 5.780E-15, 5.330E-15, 5.000E-15,
4250 4.760E-15, 4.610E-15, 4.540E-15, 4.550E-15, 4.640E-15,
4251 4.810E-15, 5.060E-15, 5.410E-15, 5.870E-15, 6.440E-15,
4252 7.150E-15, 8.020E-15, 9.100E-15, 1.050E-14, 1.220E-14,
4253 1.460E-14, 1.800E-14, 2.280E-14, 2.980E-14, 4.020E-14,
4254 5.530E-14, 7.810E-14, 1.040E-13, 1.310E-13, 1.580E-13,
4255 1.890E-13, 2.200E-13, 2.540E-13, 3.010E-13, 3.670E-13,
4256 4.430E-13, 5.420E-13, 6.850E-13, 8.440E-13, 1.040E-12,
4257 1.310E-12, 1.610E-12, 1.950E-12, 2.380E-12, 2.880E-12,
4258 3.420E-12, 4.030E-12, 4.650E-12, 5.240E-12, 5.700E-12,
4259 6.090E-12, 6.390E-12, 6.480E-12, 6.580E-12, 6.660E-12,
4260 6.700E-12, 6.660E-12, 6.650E-12, 6.800E-12, 7.090E-12,
4261 7.540E-12, 8.060E-12, 8.620E-12, 8.890E-12, 8.680E-12,
4262 8.040E-12, 7.000E-12, 5.830E-12, 4.580E-12, 3.490E-12,
4263 2.710E-12, 2.100E-12, 1.650E-12, 1.310E-12, 1.060E-12,
4264 8.350E-13, 6.450E-13, 5.020E-13, 3.940E-13, 3.090E-13,
4265 2.460E-13}; // end section diffs to MT 1.00
4266
4267
4268// CO2 continuum Ridgeway 1982, implementation of CKD_MT_1.00
4269// UNITS OF (CM**3/MOL)*1.E-20
4270const Numeric FCO2_ckd_mt_100_v1 = -20.0;
4271const Numeric FCO2_ckd_mt_100_v2 = 10000.0;
4272const Numeric FCO2_ckd_mt_100_dv = 10.0;
4273const int FCO2_ckd_mt_100_npt = 1003;
4274const double FCO2_ckd_mt_100[FCO2_ckd_mt_100_npt+addF77fields] = {
4275 0.000e0, 1.1110E-11, 1.0188E-11,
4276 9.3516E-12, 1.0188E-11, 1.1110E-11, 1.2127E-11, 1.3251E-11, // F17590
4277 1.4495E-11, 1.5872E-11, 1.7400E-11, 1.9097E-11, 2.0985E-11, // F17600
4278 2.3087E-11, 2.5431E-11, 2.8051E-11, 3.0982E-11, 3.4268E-11, // F17610
4279 3.7956E-11, 4.2105E-11, 4.6779E-11, 5.2056E-11, 5.8025E-11, // F17620
4280 6.4791E-11, 7.2477E-11, 8.1226E-11, 9.1209E-11, 1.0263E-10, // F17630
4281 1.1572E-10, 1.3078E-10, 1.4814E-10, 1.6821E-10, 1.9148E-10, // F17640
4282 2.1857E-10, 2.5019E-10, 2.8723E-10, 3.3080E-10, 3.8223E-10, // F17650
4283 4.4321E-10, 5.1583E-10, 6.0274E-10, 7.0725E-10, 8.3363E-10, // F17660
4284 9.8735E-10, 1.1755E-09, 1.4074E-09, 1.6953E-09, 2.0557E-09, // F17670
4285 2.5107E-09, 3.0909E-09, 3.8391E-09, 4.8165E-09, 6.1117E-09, // F17680
4286 7.8550E-09, 1.0241E-08, 1.3593E-08, 1.8344E-08, 2.5408E-08, // F17700
4287 3.6386E-08, 5.4251E-08, 8.4262E-08, 1.3273E-07, 2.1867E-07, // F17710
4288 3.5007E-07, 6.0011E-07, 1.0797E-06, 1.8254E-06, 3.1621E-06, // F17720
4289 4.0293E-06, 4.3683E-06, 4.4552E-06, 4.2684E-06, 3.9341E-06, // F17730
4290 2.5972E-06, 1.5617E-06, 8.9063E-07, 5.0360E-07, 3.0616E-07, // F17740
4291 1.9066E-07, 1.1904E-07, 7.6078E-08, 4.9304E-08, 3.3335E-08, // F17750
4292 2.3494E-08, 1.7114E-08, 1.2742E-08, 9.6068E-09, 7.3706E-09, // F17760
4293 5.7386E-09, 4.5302E-09, 3.6223E-09, 2.9309E-09, 2.4001E-09, // F17770
4294 1.9927E-09, 1.6877E-09, 1.4602E-09, 1.2764E-09, 1.1317E-09, // F17780
4295 1.0273E-09, 9.1943E-10, 8.0353E-10, 6.8746E-10, 5.9354E-10, // F17790
4296 5.1722E-10, 4.4975E-10, 4.2350E-10, 4.2282E-10, 4.2610E-10, // F17810
4297 4.5465E-10, 4.6166E-10, 4.3149E-10, 3.7615E-10, 3.1576E-10, // F17820
4298 2.6490E-10, 1.9143E-10, 1.2885E-10, 9.4954E-11, 7.6499E-11, // F17830
4299 6.4581E-11, 5.5923E-11, 4.9200E-11, 4.3813E-11, 3.9533E-11, // F17840
4300 3.6338E-11, 3.4320E-11, 3.3329E-11, 3.2400E-11, 3.1700E-11, // F17850
4301 3.1267E-11, 2.9940E-11, 2.7628E-11, 2.4496E-11, 2.1764E-11, // F17860
4302 1.9306E-11, 1.7352E-11, 1.7292E-11, 1.8733E-11, 2.0224E-11, // F17870
4303 2.2396E-11, 2.4225E-11, 2.4890E-11, 2.3513E-11, 2.0824E-11, // F17880
4304 1.8642E-11, 1.5676E-11, 1.2882E-11, 1.1054E-11, 1.0074E-11, // F17890
4305 9.6324E-12, 9.4910E-12, 9.5134E-12, 9.6427E-12, 9.8552E-12, // F17900
4306 1.0140E-11, 1.0494E-11, 1.0915E-11, 1.1405E-11, 1.1965E-11, // F17920
4307 1.2601E-11, 1.3316E-11, 1.4116E-11, 1.5006E-11, 1.5997E-11, // F17930
4308 1.7092E-11, 1.8305E-11, 1.9641E-11, 2.1121E-11, 2.2744E-11, // F17940
4309 2.4503E-11, 2.6419E-11, 2.8221E-11, 3.0609E-11, 3.3260E-11, // F17950
4310 3.6247E-11, 3.9581E-11, 4.3279E-11, 4.7376E-11, 5.1932E-11, // F17960
4311 5.7001E-11, 6.2654E-11, 6.8973E-11, 7.6058E-11, 8.4037E-11, // F17970
4312 9.3081E-11, 1.0344E-10, 1.1547E-10, 1.2970E-10, 1.4659E-10, // F17980
4313 1.6724E-10, 1.9481E-10, 2.3520E-10, 2.9424E-10, 3.6319E-10, // F17990
4314 4.2279E-10, 4.8494E-10, 5.2296E-10, 5.6111E-10, 5.8935E-10, // F18000
4315 6.0807E-10, 6.4204E-10, 6.8457E-10, 7.6709E-10, 8.7664E-10, // F18010
4316 1.0183E-09, 1.2116E-09, 1.4874E-09, 1.8596E-09, 2.2742E-09, // F18030
4317 2.7577E-09, 3.1932E-09, 3.6381E-09, 4.1207E-09, 4.6458E-09, // F18040
4318 5.3065E-09, 6.0741E-09, 7.1942E-09, 8.7103E-09, 1.0713E-08, // F18050
4319 1.3344E-08, 1.6831E-08, 2.1524E-08, 2.7967E-08, 3.7047E-08, // F18060
4320 5.0312E-08, 7.0566E-08, 1.0275E-07, 1.5419E-07, 2.3309E-07, // F18070
4321 3.4843E-07, 5.3194E-07, 8.7207E-07, 1.5075E-06, 2.7077E-06, // F18080
4322 4.7125E-06, 7.1734E-06, 9.2381E-06, 1.1507E-05, 1.3737E-05, // F18090
4323 1.4004E-05, 1.2679E-05, 1.0478E-05, 8.5684E-06, 6.1472E-06, // F18100
4324 3.2424E-06, 1.5291E-06, 8.0390E-07, 4.6767E-07, 2.9170E-07, // F18110
4325 1.9148E-07, 1.3076E-07, 9.2156E-08, 6.6652E-08, 4.9265E-08, // F18120
4326 3.7094E-08, 2.8380E-08, 2.2019E-08, 1.7297E-08, 1.3738E-08, // F18140
4327 1.1019E-08, 8.9178E-09, 7.2762E-09, 5.9810E-09, 4.9500E-09, // F18150
4328 4.1226E-09, 3.4534E-09, 2.9082E-09, 2.4611E-09, 2.0922E-09, // F18160
4329 1.7864E-09, 1.5313E-09, 1.3176E-09, 1.1379E-09, 9.8612E-10, // F18170
4330 8.5741E-10, 7.4782E-10, 6.5416E-10, 5.7384E-10, 5.0471E-10, // F18180
4331 4.4503E-10, 3.9334E-10, 3.4841E-10, 3.0927E-10, 2.7510E-10, // F18190
4332 2.4519E-10, 2.1893E-10, 1.9587E-10, 1.7555E-10, 1.5762E-10, // F18200
4333 1.4178E-10, 1.2772E-10, 1.1524E-10, 1.0414E-10, 9.4248E-11, // F18210
4334 8.5421E-11, 7.7530E-11, 7.0466E-11, 6.4134E-11, 5.8450E-11, // F18220
4335 5.3342E-11, 4.8746E-11, 4.4607E-11, 4.0874E-11, 3.7507E-11, // F18230
4336 3.4466E-11, 3.1719E-11, 2.9237E-11, 2.6993E-11, 2.4968E-11, // F18250
4337 2.3139E-11, 2.1494E-11, 2.0022E-11, 1.8709E-11, 1.7541E-11, // F18260
4338 1.6533E-11, 1.5690E-11, 1.5027E-11, 1.4560E-11, 1.4169E-11, // F18270
4339 1.3796E-11, 1.3553E-11, 1.3526E-11, 1.3567E-11, 1.3399E-11, // F18280
4340 1.3149E-11, 1.3049E-11, 1.3078E-11, 1.3093E-11, 1.3168E-11, // F18290
4341 1.3572E-11, 1.4383E-11, 1.5698E-11, 1.7658E-11, 2.0197E-11, // F18300
4342 2.2845E-11, 2.5944E-11, 3.0250E-11, 3.5900E-11, 4.1482E-11, // F18310
4343 4.6602E-11, 5.2453E-11, 5.9754E-11, 6.9308E-11, 8.0696E-11, // F18320
4344 9.5737E-11, 1.1733E-10, 1.4793E-10, 1.9119E-10, 2.5355E-10, // F18330
4345 3.4588E-10, 4.8343E-10, 6.9378E-10, 1.0212E-09, 1.4858E-09, // F18340
4346 2.0906E-09, 3.0576E-09, 4.6318E-09, 7.1585E-09, 1.1259E-08, // F18360
4347 1.7954E-08, 2.9760E-08, 4.6693E-08, 6.2035E-08, 7.4399E-08, // F18370
4348 9.1705E-08, 9.9448E-08, 9.5181E-08, 8.3050E-08, 7.1756E-08, // F18380
4349 6.6261E-08, 6.0357E-08, 6.6988E-08, 8.3419E-08, 9.8834E-08, // F18390
4350 1.2385E-07, 1.3962E-07, 1.3651E-07, 1.1963E-07, 9.7731E-08, // F18400
4351 8.0083E-08, 5.1660E-08, 2.5778E-08, 1.2600E-08, 6.8779E-09, // F18410
4352 4.1161E-09, 2.6276E-09, 1.7595E-09, 1.2225E-09, 8.7493E-10, // F18420
4353 6.4179E-10, 4.7987E-10, 3.6491E-10, 2.8191E-10, 2.2084E-10, // F18430
4354 1.7507E-10, 1.4025E-10, 1.1344E-10, 9.2580E-11, 7.6170E-11, // F18440
4355 6.3142E-11, 5.2694E-11, 4.4260E-11, 3.7421E-11, 3.1847E-11, // F18450
4356 2.7263E-11, 2.3352E-11, 2.0081E-11, 1.7332E-11, 1.5000E-11, // F18470
4357 1.2978E-11, 1.1204E-11, 9.7513E-12, 8.5300E-12, 7.4888E-12, // F18480
4358 6.5947E-12, 5.8231E-12, 5.1548E-12, 4.5739E-12, 4.0675E-12, // F18490
4359 3.6250E-12, 3.2371E-12, 2.8963E-12, 2.5964E-12, 2.3316E-12, // F18500
4360 2.0975E-12, 1.8902E-12, 1.7061E-12, 1.5425E-12, 1.3967E-12, // F18510
4361 1.2665E-12, 1.1503E-12, 1.0463E-12, 9.5319E-13, 8.6963E-13, // F18520
4362 7.9461E-13, 7.2718E-13, 6.6654E-13, 6.1201E-13, 5.6296E-13, // F18530
4363 5.1894E-13, 4.7969E-13, 4.4494E-13, 4.1320E-13, 3.8529E-13, // F18540
4364 3.6202E-13, 3.4320E-13, 3.2546E-13, 3.0741E-13, 2.9156E-13, // F18550
4365 2.7819E-13, 2.6576E-13, 2.5327E-13, 2.4319E-13, 2.3770E-13, // F18560
4366 2.3645E-13, 2.3967E-13, 2.4960E-13, 2.6858E-13, 2.9679E-13, // F18580
4367 3.3247E-13, 3.8487E-13, 4.7576E-13, 6.1833E-13, 8.0740E-13, // F18590
4368 1.0267E-12, 1.2291E-12, 1.4710E-12, 1.7211E-12, 1.8251E-12, // F18600
4369 1.8982E-12, 1.9768E-12, 2.1877E-12, 2.5008E-12, 3.0545E-12, // F18610
4370 4.1513E-12, 5.7469E-12, 7.7913E-12, 1.0873E-11, 1.5538E-11, // F18620
4371 2.2838E-11, 3.4153E-11, 4.9751E-11, 7.0591E-11, 1.0794E-10, // F18630
4372 1.7287E-10, 2.6554E-10, 3.5250E-10, 4.1952E-10, 5.1979E-10, // F18640
4373 5.7649E-10, 5.6168E-10, 5.0014E-10, 4.3670E-10, 4.0057E-10, // F18650
4374 3.5169E-10, 3.7578E-10, 5.5054E-10, 8.8962E-10, 1.2940E-09, // F18660
4375 1.6293E-09, 2.0553E-09, 2.3945E-09, 2.3926E-09, 2.1385E-09, // F18670
4376 1.7637E-09, 1.4623E-09, 1.0150E-09, 5.5612E-10, 3.5162E-10, // F18690
4377 3.4009E-10, 4.1744E-10, 5.0009E-10, 6.0748E-10, 7.3258E-10, // F18700
4378 7.6553E-10, 7.2066E-10, 6.1317E-10, 5.1585E-10, 3.9136E-10, // F18710
4379 2.2991E-10, 1.2590E-10, 6.9549E-11, 3.8699E-11, 2.2976E-11, // F18720
4380 1.4702E-11, 9.9989E-12, 7.1233E-12, 5.2612E-12, 4.0298E-12, // F18730
4381 3.2395E-12, 2.7932E-12, 2.6331E-12, 2.7835E-12, 3.3167E-12, // F18740
4382 3.3581E-12, 3.3404E-12, 3.1243E-12, 2.8459E-12, 2.4092E-12, // F18750
4383 1.5349E-12, 9.7039E-13, 5.8611E-13, 3.9686E-13, 2.9332E-13, // F18760
4384 2.2795E-13, 1.8432E-13, 1.5287E-13, 1.2898E-13, 1.1019E-13, // F18770
4385 9.5041E-14, 8.2617E-14, 7.2310E-14, 6.3711E-14, 5.6561E-14, // F18780
4386 5.0763E-14, 4.6525E-14, 4.4418E-14, 4.4681E-14, 4.7199E-14, // F18800
4387 5.0389E-14, 5.3620E-14, 6.0817E-14, 6.0192E-14, 5.5878E-14, // F18810
4388 4.9874E-14, 4.3955E-14, 3.9854E-14, 3.1697E-14, 3.1135E-14, // F18820
4389 3.4683E-14, 3.8789E-14, 4.6932E-14, 5.0213E-14, 4.7156E-14, // F18830
4390 4.2130E-14, 3.5554E-14, 3.0465E-14, 1.9216E-14, 1.1378E-14, // F18840
4391 8.2878E-15, 6.8260E-15, 6.0960E-15, 5.8135E-15, 5.9618E-15, // F18850
4392 6.8295E-15, 9.2943E-15, 1.2572E-14, 1.4837E-14, 1.8595E-14, // F18860
4393 2.1533E-14, 2.2008E-14, 2.1305E-14, 1.9743E-14, 2.0413E-14, // F18870
4394 2.1131E-14, 2.5346E-14, 3.3709E-14, 4.3995E-14, 5.8911E-14, // F18880
4395 7.8451E-14, 1.0537E-13, 1.4559E-13, 2.0405E-13, 2.6734E-13, // F18890
4396 3.5029E-13, 4.9788E-13, 7.3207E-13, 1.0979E-12, 1.4960E-12, // F18910
4397 1.7906E-12, 2.2171E-12, 2.5369E-12, 2.5873E-12, 2.3871E-12, // F18920
4398 2.0730E-12, 1.9095E-12, 1.6227E-12, 1.3981E-12, 1.5228E-12, // F18930
4399 2.0956E-12, 3.2493E-12, 5.2740E-12, 8.6666E-12, 1.2672E-11, // F18940
4400 1.5725E-11, 1.9496E-11, 2.2858E-11, 2.2939E-11, 2.0597E-11, // F18950
4401 1.7021E-11, 1.4456E-11, 1.0794E-11, 7.1327E-12, 6.5438E-12, // F18960
4402 8.8057E-12, 1.2311E-11, 1.5284E-11, 1.9273E-11, 2.2796E-11, // F18970
4403 2.3156E-11, 2.0914E-11, 1.7298E-11, 1.4424E-11, 1.0127E-11, // F18980
4404 5.2952E-12, 2.5759E-12, 1.4304E-12, 9.4758E-13, 7.9895E-13, // F18990
4405 9.1124E-13, 1.2297E-12, 1.5898E-12, 1.9056E-12, 2.3905E-12, // F19000
4406 2.6695E-12, 2.6297E-12, 2.3467E-12, 2.0058E-12, 1.6773E-12, // F19020
4407 1.1327E-12, 6.7331E-13, 4.0954E-13, 2.5152E-13, 1.4491E-13, // F19030
4408 9.0916E-14, 6.6510E-14, 5.9022E-14, 6.4403E-14, 8.3126E-14, // F19040
4409 1.2409E-13, 1.5153E-13, 1.6909E-13, 1.7938E-13, 1.9169E-13, // F19050
4410 2.1173E-13, 2.1941E-13, 2.6360E-13, 3.5956E-13, 4.8369E-13, // F19060
4411 5.9657E-13, 7.4062E-13, 8.9452E-13, 8.7899E-13, 8.2012E-13, // F19070
4412 7.4109E-13, 6.9845E-13, 6.3130E-13, 5.6538E-13, 6.9516E-13, // F19080
4413 9.9486E-13, 1.5226E-12, 2.4155E-12, 3.9119E-12, 6.3541E-12, // F19090
4414 1.0075E-11, 1.5903E-11, 2.5091E-11, 3.6282E-11, 4.6076E-11, // F19100
4415 5.6240E-11, 7.1126E-11, 7.0230E-11, 6.3642E-11, 5.3722E-11, // F19110
4416 4.4651E-11, 3.4409E-11, 1.5287E-11, 7.2479E-12, 3.9218E-12, // F19130
4417 2.3172E-12, 1.4585E-12, 9.6297E-13, 6.6017E-13, 4.6655E-13, // F19140
4418 3.3814E-13, 2.5034E-13, 1.8874E-13, 1.4457E-13, 1.1228E-13, // F19150
4419 8.8284E-14, 7.0188E-14, 5.6365E-14, 4.5685E-14, 3.7357E-14, // F19160
4420 3.0817E-14, 2.5674E-14, 2.1679E-14, 1.8780E-14, 1.7243E-14, // F19170
4421 1.6273E-14, 1.5201E-14, 1.5091E-14, 1.4725E-14, 1.3668E-14, // F19180
4422 1.1940E-14, 1.0097E-14, 8.8905E-15, 7.1475E-15, 5.8080E-15, // F19190
4423 5.5216E-15, 5.9338E-15, 7.1932E-15, 9.9780E-15, 1.6167E-14, // F19200
4424 2.9100E-14, 5.2355E-14, 8.4889E-14, 1.1311E-13, 1.4192E-13, // F19210
4425 1.7648E-13, 1.8657E-13, 1.7498E-13, 1.4877E-13, 1.2578E-13, // F19220
4426 1.0051E-13, 6.7213E-14, 5.4750E-14, 7.0454E-14, 1.1351E-13, // F19240
4427 1.8015E-13, 2.4825E-13, 3.0875E-13, 3.9200E-13, 4.2550E-13, // F19250
4428 4.0067E-13, 3.4438E-13, 2.8204E-13, 2.2432E-13, 1.3172E-13, // F19260
4429 6.2820E-14, 3.6474E-14, 2.9409E-14, 3.4164E-14, 4.8300E-14, // F19270
4430 6.4140E-14, 7.7284E-14, 9.7973E-14, 1.0969E-13, 1.0580E-13, // F19280
4431 9.2070E-14, 7.5008E-14, 6.1722E-14, 3.8874E-14, 1.9007E-14, // F19290
4432 9.6765E-15, 5.5169E-15, 3.5254E-15, 2.5012E-15, 2.0013E-15, // F19300
4433 1.8810E-15, 2.2143E-15, 3.5332E-15, 5.7552E-15, 7.3359E-15, // F19310
4434 8.3292E-15, 9.9174E-15, 1.0930E-14, 1.1185E-14, 1.0884E-14, // F19320
4435 1.0577E-14, 1.1048E-14, 1.1611E-14, 1.1128E-14, 1.0729E-14, // F19330
4436 1.0248E-14, 1.0630E-14, 1.1793E-14, 1.3977E-14, 1.9857E-14, // F19350
4437 2.9182E-14, 4.2229E-14, 6.2710E-14, 9.0717E-14, 1.2561E-13, // F19360
4438 1.6951E-13, 2.2520E-13, 3.2470E-13, 4.5178E-13, 6.3104E-13, // F19370
4439 8.7521E-13, 1.1073E-12, 1.3534E-12, 1.6954E-12, 1.7005E-12, // F19380
4440 1.5993E-12, 1.4416E-12, 1.3280E-12, 1.2760E-12, 1.1076E-12, // F19390
4441 1.2850E-12, 1.6208E-12, 1.9527E-12, 2.4941E-12, 2.5077E-12, // F19400
4442 2.3156E-12, 2.0069E-12, 1.6301E-12, 1.2885E-12, 5.9863E-13, // F19410
4443 2.8012E-13, 1.5065E-13, 8.8802E-14, 5.5888E-14, 3.6951E-14, // F19420
4444 2.5393E-14, 1.8001E-14, 1.3093E-14, 9.7308E-15, 7.3665E-15, // F19430
4445 5.6662E-15, 4.4194E-15, 3.4897E-15, 2.7857E-15, 2.2457E-15, // F19440
4446 1.8264E-15, 1.4973E-15, 1.2365E-15, 1.0280E-15, 8.5996E-16, // F19460
4447 7.2345E-16, 6.1182E-16, 5.1994E-16, 4.4388E-16, 3.8055E-16, // F19470
4448 3.2756E-16, 2.8300E-16, 2.4537E-16, 2.1347E-16, 1.8630E-16, // F19480
4449 1.6307E-16, 1.4314E-16, 1.2599E-16, 1.1117E-16, 9.8344E-17, // F19490
4450 8.7197E-17, 7.7487E-17, 6.9004E-17, 6.1577E-17, 5.5060E-17, // F19500
4451 4.9325E-17, 4.4271E-17, 3.9810E-17, 3.5861E-17, 3.2361E-17, // F19510
4452 2.9252E-17, 2.6487E-17, 2.4023E-17, 2.1826E-17, 1.9862E-17, // F19520
4453 1.8107E-17, 1.6536E-17, 1.5129E-17, 1.3869E-17, 1.2739E-17, // F19530
4454 1.1726E-17, 1.0820E-17, 1.0009E-17, 9.2846E-18, 8.6398E-18, // F19540
4455 8.0682E-18, 7.5641E-18, 7.1229E-18, 6.7411E-18, 6.4161E-18, // F19550
4456 6.1455E-18, 5.9290E-18, 5.7662E-18, 5.6574E-18, 5.6049E-18, // F19570
4457 5.6112E-18, 5.6811E-18, 5.8200E-18, 6.0364E-18, 6.3405E-18, // F19580
4458 6.7450E-18, 7.2674E-18, 7.9298E-18, 8.7613E-18, 9.8010E-18, // F19590
4459 1.1086E-17, 1.2686E-17, 1.4679E-17, 1.7177E-17, 2.0335E-17, // F19600
4460 2.4384E-17, 2.9538E-17, 3.6416E-17, 4.5520E-17, 5.7788E-17, // F19610
4461 7.4676E-17, 9.8513E-17, 1.3323E-16, 1.8570E-16, 2.6897E-16, // F19620
4462 4.0958E-16, 6.6785E-16, 1.2064E-15, 2.4023E-15, 4.3240E-15, // F19630
4463 6.6353E-15, 8.6393E-15, 1.1433E-14, 1.3946E-14, 1.3611E-14, // F19640
4464 1.2557E-14, 1.0934E-14, 1.0039E-14, 8.5099E-15, 7.9557E-15, // F19650
4465 1.1346E-14, 1.8512E-14, 2.9285E-14, 4.1585E-14, 5.2809E-14, // F19660
4466 7.0377E-14, 7.8094E-14, 7.3735E-14, 6.5845E-14, 5.5023E-14, // F19680
4467 4.6866E-14, 2.7430E-14, 1.5975E-14, 1.4522E-14, 1.7075E-14, // F19690
4468 2.0408E-14, 2.5119E-14, 3.1194E-14, 3.0280E-14, 2.7676E-14, // F19700
4469 2.3344E-14, 1.9466E-14, 1.4140E-14, 6.2087E-15, 3.0307E-15, // F19710
4470 1.6815E-15, 1.0169E-15, 6.5448E-16, 4.4162E-16, 3.0928E-16, // F19720
4471 2.2320E-16, 1.6511E-16, 1.2471E-16, 9.5881E-17, 7.4850E-17, // F19730
4472 5.9216E-17, 4.7400E-17, 3.8338E-17, 3.1298E-17, 2.5765E-17, // F19740
4473 2.1371E-17, 1.7848E-17, 1.5000E-17, 1.2679E-17, 1.0774E-17, // F19750
4474 9.2002E-18, 7.8922E-18, 6.7987E-18, 5.8800E-18, 5.1042E-18, // F19760
4475 4.4461E-18, 3.8855E-18, 3.4060E-18, 2.9944E-18, 2.6397E-18, // F19770
4476 2.3331E-18};
4477
4478// CO2 continuum Ridgeway 1982, implementation of CKD_MT_2.50
4479//Hartmann line coupling: isotopes 1 and 2
4480// UNITS OF (CM**3/MOL)*1.E-20
4481const Numeric FCO2_ckd_mt_250_v1 = -4.0;
4482const Numeric FCO2_ckd_mt_250_v2 = 10000.0;
4483const Numeric FCO2_ckd_mt_250_dv = 2.0;
4484const int FCO2_ckd_mt_250_npt = 5003;
4485const double FCO2_ckd_mt_250[FCO2_ckd_mt_250_npt+addF77fields] = {
4486 8.391e-13, 8.359e-13,
4487 8.345e-13, 8.359e-13, 8.391e-13, 8.439e-13, 8.500e-13,
4488 8.573e-13, 8.655e-13, 8.750e-13, 8.859e-13, 8.981e-13,
4489 9.119e-13, 9.273e-13, 9.442e-13, 9.626e-13, 9.825e-13,
4490 1.004e-12, 1.027e-12, 1.052e-12, 1.078e-12, 1.106e-12,
4491 1.135e-12, 1.166e-12, 1.199e-12, 1.233e-12, 1.270e-12,
4492 1.308e-12, 1.347e-12, 1.389e-12, 1.432e-12, 1.478e-12,
4493 1.525e-12, 1.574e-12, 1.625e-12, 1.678e-12, 1.734e-12,
4494 1.791e-12, 1.850e-12, 1.912e-12, 1.976e-12, 2.042e-12,
4495 2.110e-12, 2.181e-12, 2.254e-12, 2.329e-12, 2.408e-12,
4496 2.488e-12, 2.572e-12, 2.658e-12, 2.746e-12, 2.838e-12,
4497 2.933e-12, 3.030e-12, 3.130e-12, 3.234e-12, 3.341e-12,
4498 3.451e-12, 3.564e-12, 3.681e-12, 3.801e-12, 3.925e-12,
4499 4.053e-12, 4.184e-12, 4.320e-12, 4.459e-12, 4.603e-12,
4500 4.750e-12, 4.902e-12, 5.059e-12, 5.220e-12, 5.386e-12,
4501 5.556e-12, 5.732e-12, 5.912e-12, 6.098e-12, 6.290e-12,
4502 6.487e-12, 6.689e-12, 6.897e-12, 7.112e-12, 7.333e-12,
4503 7.560e-12, 7.793e-12, 8.034e-12, 8.281e-12, 8.535e-12,
4504 8.797e-12, 9.067e-12, 9.344e-12, 9.629e-12, 9.923e-12,
4505 1.023e-11, 1.054e-11, 1.086e-11, 1.119e-11, 1.152e-11,
4506 1.187e-11, 1.223e-11, 1.260e-11, 1.298e-11, 1.338e-11,
4507 1.378e-11, 1.419e-11, 1.462e-11, 1.506e-11, 1.552e-11,
4508 1.598e-11, 1.646e-11, 1.696e-11, 1.747e-11, 1.799e-11,
4509 1.854e-11, 1.909e-11, 1.967e-11, 2.026e-11, 2.087e-11,
4510 2.150e-11, 2.214e-11, 2.281e-11, 2.350e-11, 2.421e-11,
4511 2.494e-11, 2.569e-11, 2.647e-11, 2.727e-11, 2.810e-11,
4512 2.895e-11, 2.983e-11, 3.073e-11, 3.167e-11, 3.263e-11,
4513 3.363e-11, 3.466e-11, 3.572e-11, 3.681e-11, 3.794e-11,
4514 3.910e-11, 4.031e-11, 4.155e-11, 4.283e-11, 4.416e-11,
4515 4.552e-11, 4.694e-11, 4.840e-11, 4.991e-11, 5.147e-11,
4516 5.308e-11, 5.474e-11, 5.646e-11, 5.824e-11, 6.008e-11,
4517 6.199e-11, 6.395e-11, 6.599e-11, 6.809e-11, 7.027e-11,
4518 7.253e-11, 7.486e-11, 7.728e-11, 7.978e-11, 8.237e-11,
4519 8.505e-11, 8.782e-11, 9.070e-11, 9.368e-11, 9.677e-11,
4520 9.997e-11, 1.033e-10, 1.067e-10, 1.103e-10, 1.140e-10,
4521 1.178e-10, 1.218e-10, 1.259e-10, 1.302e-10, 1.347e-10,
4522 1.393e-10, 1.441e-10, 1.491e-10, 1.542e-10, 1.596e-10,
4523 1.652e-10, 1.710e-10, 1.770e-10, 1.833e-10, 1.899e-10,
4524 1.966e-10, 2.037e-10, 2.111e-10, 2.187e-10, 2.267e-10,
4525 2.350e-10, 2.437e-10, 2.527e-10, 2.621e-10, 2.719e-10,
4526 2.821e-10, 2.928e-10, 3.039e-10, 3.155e-10, 3.276e-10,
4527 3.403e-10, 3.535e-10, 3.674e-10, 3.818e-10, 3.969e-10,
4528 4.127e-10, 4.293e-10, 4.466e-10, 4.647e-10, 4.837e-10,
4529 5.036e-10, 5.245e-10, 5.464e-10, 5.695e-10, 5.937e-10,
4530 6.191e-10, 6.459e-10, 6.742e-10, 7.039e-10, 7.353e-10,
4531 7.683e-10, 8.032e-10, 8.400e-10, 8.785e-10, 9.213e-10,
4532 9.661e-10, 1.013e-09, 1.062e-09, 1.114e-09, 1.169e-09,
4533 1.226e-09, 1.286e-09, 1.350e-09, 1.417e-09, 1.488e-09,
4534 1.564e-09, 1.643e-09, 1.728e-09, 1.818e-09, 1.914e-09,
4535 2.016e-09, 2.126e-09, 2.244e-09, 2.378e-09, 2.522e-09,
4536 2.677e-09, 2.843e-09, 3.024e-09, 3.220e-09, 3.437e-09,
4537 3.676e-09, 3.941e-09, 4.236e-09, 4.565e-09, 4.931e-09,
4538 5.336e-09, 5.784e-09, 6.276e-09, 6.817e-09, 7.410e-09,
4539 8.108e-09, 9.238e-09, 1.044e-08, 1.167e-08, 1.292e-08,
4540 1.419e-08, 1.548e-08, 1.679e-08, 1.816e-08, 1.956e-08,
4541 2.103e-08, 2.258e-08, 2.425e-08, 2.609e-08, 2.815e-08,
4542 3.051e-08, 3.326e-08, 3.653e-08, 4.040e-08, 4.546e-08,
4543 5.160e-08, 5.909e-08, 6.836e-08, 7.995e-08, 9.457e-08,
4544 1.130e-07, 1.366e-07, 1.731e-07, 2.156e-07, 2.655e-07,
4545 3.241e-07, 3.927e-07, 4.723e-07, 5.639e-07, 6.685e-07,
4546 7.872e-07, 9.510e-07, 1.199e-06, 1.528e-06, 1.847e-06,
4547 2.155e-06, 2.453e-06, 2.742e-06, 3.026e-06, 3.308e-06,
4548 3.594e-06, 3.895e-06, 4.227e-06, 4.609e-06, 5.073e-06,
4549 5.660e-06, 6.406e-06, 7.410e-06, 8.801e-06, 1.052e-05,
4550 1.261e-05, 1.512e-05, 1.808e-05, 2.149e-05, 2.535e-05,
4551 2.970e-05, 3.413e-05, 4.573e-05, 6.122e-05, 7.642e-05,
4552 9.099e-05, 1.048e-04, 1.176e-04, 1.294e-04, 1.398e-04,
4553 1.488e-04, 1.561e-04, 1.616e-04, 1.653e-04, 1.670e-04,
4554 1.666e-04, 1.642e-04, 1.599e-04, 1.538e-04, 1.460e-04,
4555 1.365e-04, 1.256e-04, 1.132e-04, 9.969e-05, 8.499e-05,
4556 6.925e-05, 5.260e-05, 4.198e-05, 3.475e-05, 2.933e-05,
4557 2.457e-05, 2.043e-05, 1.690e-05, 1.394e-05, 1.151e-05,
4558 9.559e-06, 8.021e-06, 6.826e-06, 5.920e-06, 5.232e-06,
4559 4.703e-06, 4.285e-06, 3.941e-06, 3.643e-06, 3.368e-06,
4560 3.106e-06, 2.847e-06, 2.585e-06, 2.316e-06, 2.040e-06,
4561 1.755e-06, 1.463e-06, 1.165e-06, 9.093e-07, 8.070e-07,
4562 6.991e-07, 6.009e-07, 5.118e-07, 4.319e-07, 3.612e-07,
4563 2.996e-07, 2.465e-07, 2.012e-07, 1.633e-07, 1.370e-07,
4564 1.172e-07, 1.015e-07, 8.892e-08, 7.876e-08, 7.053e-08,
4565 6.378e-08, 5.817e-08, 5.367e-08, 4.988e-08, 4.660e-08,
4566 4.372e-08, 4.113e-08, 3.874e-08, 3.651e-08, 3.439e-08,
4567 3.234e-08, 3.033e-08, 2.836e-08, 2.641e-08, 2.448e-08,
4568 2.255e-08, 2.062e-08, 1.869e-08, 1.677e-08, 1.532e-08,
4569 1.417e-08, 1.317e-08, 1.226e-08, 1.143e-08, 1.068e-08,
4570 1.001e-08, 9.396e-09, 8.846e-09, 8.350e-09, 7.902e-09,
4571 7.496e-09, 7.125e-09, 6.784e-09, 6.467e-09, 6.171e-09,
4572 5.892e-09, 5.629e-09, 5.379e-09, 5.161e-09, 4.952e-09,
4573 4.756e-09, 4.571e-09, 4.396e-09, 4.232e-09, 4.077e-09,
4574 3.930e-09, 3.792e-09, 3.662e-09, 3.541e-09, 3.426e-09,
4575 3.320e-09, 3.221e-09, 3.129e-09, 3.045e-09, 2.967e-09,
4576 2.898e-09, 2.839e-09, 2.788e-09, 2.743e-09, 2.706e-09,
4577 2.676e-09, 2.653e-09, 2.638e-09, 2.633e-09, 2.640e-09,
4578 2.661e-09, 2.700e-09, 2.760e-09, 2.844e-09, 2.953e-09,
4579 3.092e-09, 3.260e-09, 3.459e-09, 3.685e-09, 3.936e-09,
4580 4.205e-09, 4.482e-09, 4.756e-09, 5.015e-09, 5.255e-09,
4581 5.479e-09, 5.696e-09, 5.915e-09, 6.139e-09, 6.369e-09,
4582 6.596e-09, 6.811e-09, 6.999e-09, 7.148e-09, 7.244e-09,
4583 7.280e-09, 7.252e-09, 7.159e-09, 7.007e-09, 6.799e-09,
4584 6.547e-09, 6.260e-09, 5.948e-09, 5.618e-09, 5.279e-09,
4585 4.935e-09, 4.584e-09, 4.224e-09, 3.849e-09, 3.457e-09,
4586 3.055e-09, 2.658e-09, 2.285e-09, 1.948e-09, 1.661e-09,
4587 1.429e-09, 1.254e-09, 1.133e-09, 1.060e-09, 1.031e-09,
4588 1.038e-09, 1.079e-09, 1.151e-09, 1.254e-09, 1.391e-09,
4589 1.564e-09, 1.777e-09, 2.033e-09, 2.335e-09, 2.682e-09,
4590 3.072e-09, 3.497e-09, 3.947e-09, 4.407e-09, 4.859e-09,
4591 5.293e-09, 5.707e-09, 6.108e-09, 6.510e-09, 6.919e-09,
4592 7.337e-09, 7.762e-09, 8.178e-09, 8.573e-09, 8.923e-09,
4593 9.211e-09, 9.419e-09, 9.536e-09, 9.554e-09, 9.473e-09,
4594 9.300e-09, 9.043e-09, 8.715e-09, 8.330e-09, 7.904e-09,
4595 7.447e-09, 6.968e-09, 6.471e-09, 5.955e-09, 5.414e-09,
4596 4.843e-09, 4.246e-09, 3.644e-09, 3.054e-09, 2.504e-09,
4597 2.010e-09, 1.584e-09, 1.234e-09, 9.578e-10, 7.490e-10,
4598 5.962e-10, 4.887e-10, 4.149e-10, 3.652e-10, 3.309e-10,
4599 3.067e-10, 2.892e-10, 2.758e-10, 2.650e-10, 2.560e-10,
4600 2.482e-10, 2.413e-10, 2.351e-10, 2.295e-10, 2.244e-10,
4601 2.197e-10, 2.154e-10, 2.113e-10, 2.075e-10, 2.039e-10,
4602 2.005e-10, 1.973e-10, 1.942e-10, 1.912e-10, 1.884e-10,
4603 1.857e-10, 1.831e-10, 1.805e-10, 1.781e-10, 1.757e-10,
4604 1.734e-10, 1.712e-10, 1.691e-10, 1.670e-10, 1.649e-10,
4605 1.629e-10, 1.610e-10, 1.591e-10, 1.573e-10, 1.555e-10,
4606 1.537e-10, 1.520e-10, 1.503e-10, 1.487e-10, 1.471e-10,
4607 1.455e-10, 1.440e-10, 1.425e-10, 1.410e-10, 1.396e-10,
4608 1.381e-10, 1.368e-10, 1.354e-10, 1.341e-10, 1.328e-10,
4609 1.315e-10, 1.303e-10, 1.290e-10, 1.278e-10, 1.267e-10,
4610 1.255e-10, 1.244e-10, 1.233e-10, 1.222e-10, 1.211e-10,
4611 1.201e-10, 1.190e-10, 1.180e-10, 1.170e-10, 1.161e-10,
4612 1.151e-10, 1.142e-10, 1.133e-10, 1.124e-10, 1.115e-10,
4613 1.106e-10, 1.098e-10, 1.089e-10, 1.081e-10, 1.073e-10,
4614 1.065e-10, 1.058e-10, 1.050e-10, 1.043e-10, 1.036e-10,
4615 1.028e-10, 1.022e-10, 1.015e-10, 1.008e-10, 1.001e-10,
4616 9.950e-11, 9.887e-11, 9.825e-11, 9.765e-11, 9.705e-11,
4617 9.647e-11, 9.591e-11, 9.535e-11, 9.480e-11, 9.427e-11,
4618 9.375e-11, 9.324e-11, 9.274e-11, 9.225e-11, 9.177e-11,
4619 9.131e-11, 9.085e-11, 9.040e-11, 8.997e-11, 8.954e-11,
4620 8.913e-11, 8.872e-11, 8.833e-11, 8.794e-11, 8.757e-11,
4621 8.720e-11, 8.684e-11, 8.650e-11, 8.616e-11, 8.583e-11,
4622 8.551e-11, 8.520e-11, 8.490e-11, 8.461e-11, 8.432e-11,
4623 8.405e-11, 8.378e-11, 8.352e-11, 8.327e-11, 8.303e-11,
4624 8.280e-11, 8.257e-11, 8.236e-11, 8.215e-11, 8.195e-11,
4625 8.176e-11, 8.158e-11, 8.140e-11, 8.123e-11, 8.107e-11,
4626 8.092e-11, 8.078e-11, 8.064e-11, 8.051e-11, 8.039e-11,
4627 8.028e-11, 8.018e-11, 8.008e-11, 7.999e-11, 7.991e-11,
4628 7.983e-11, 7.976e-11, 7.971e-11, 7.965e-11, 7.961e-11,
4629 7.957e-11, 7.954e-11, 7.952e-11, 7.951e-11, 7.950e-11,
4630 7.950e-11, 7.951e-11, 7.952e-11, 7.955e-11, 7.958e-11,
4631 7.961e-11, 7.966e-11, 7.971e-11, 7.977e-11, 7.984e-11,
4632 7.991e-11, 8.000e-11, 8.009e-11, 8.018e-11, 8.029e-11,
4633 8.040e-11, 8.052e-11, 8.065e-11, 8.079e-11, 8.093e-11,
4634 8.108e-11, 8.124e-11, 8.141e-11, 8.158e-11, 8.176e-11,
4635 8.195e-11, 8.215e-11, 8.235e-11, 8.257e-11, 8.279e-11,
4636 8.302e-11, 8.326e-11, 8.350e-11, 8.376e-11, 8.402e-11,
4637 8.429e-11, 8.457e-11, 8.486e-11, 8.515e-11, 8.546e-11,
4638 8.577e-11, 8.609e-11, 8.642e-11, 8.676e-11, 8.711e-11,
4639 8.747e-11, 8.783e-11, 8.821e-11, 8.859e-11, 8.898e-11,
4640 8.939e-11, 8.980e-11, 9.022e-11, 9.065e-11, 9.109e-11,
4641 9.155e-11, 9.201e-11, 9.248e-11, 9.296e-11, 9.345e-11,
4642 9.395e-11, 9.446e-11, 9.499e-11, 9.552e-11, 9.606e-11,
4643 9.662e-11, 9.719e-11, 9.776e-11, 9.835e-11, 9.895e-11,
4644 9.956e-11, 1.002e-10, 1.008e-10, 1.015e-10, 1.021e-10,
4645 1.028e-10, 1.035e-10, 1.042e-10, 1.049e-10, 1.056e-10,
4646 1.063e-10, 1.071e-10, 1.079e-10, 1.086e-10, 1.094e-10,
4647 1.102e-10, 1.111e-10, 1.119e-10, 1.127e-10, 1.136e-10,
4648 1.145e-10, 1.154e-10, 1.163e-10, 1.172e-10, 1.181e-10,
4649 1.191e-10, 1.201e-10, 1.211e-10, 1.221e-10, 1.231e-10,
4650 1.241e-10, 1.252e-10, 1.263e-10, 1.274e-10, 1.285e-10,
4651 1.296e-10, 1.308e-10, 1.319e-10, 1.331e-10, 1.344e-10,
4652 1.356e-10, 1.368e-10, 1.381e-10, 1.394e-10, 1.407e-10,
4653 1.421e-10, 1.435e-10, 1.448e-10, 1.463e-10, 1.477e-10,
4654 1.492e-10, 1.506e-10, 1.522e-10, 1.537e-10, 1.553e-10,
4655 1.568e-10, 1.585e-10, 1.601e-10, 1.618e-10, 1.635e-10,
4656 1.652e-10, 1.670e-10, 1.688e-10, 1.706e-10, 1.725e-10,
4657 1.744e-10, 1.763e-10, 1.782e-10, 1.802e-10, 1.823e-10,
4658 1.843e-10, 1.864e-10, 1.886e-10, 1.907e-10, 1.929e-10,
4659 1.952e-10, 1.975e-10, 1.998e-10, 2.022e-10, 2.046e-10,
4660 2.071e-10, 2.096e-10, 2.122e-10, 2.148e-10, 2.174e-10,
4661 2.202e-10, 2.229e-10, 2.257e-10, 2.286e-10, 2.315e-10,
4662 2.345e-10, 2.375e-10, 2.406e-10, 2.438e-10, 2.470e-10,
4663 2.503e-10, 2.536e-10, 2.570e-10, 2.605e-10, 2.641e-10,
4664 2.677e-10, 2.714e-10, 2.752e-10, 2.791e-10, 2.831e-10,
4665 2.871e-10, 2.913e-10, 2.955e-10, 2.999e-10, 3.043e-10,
4666 3.089e-10, 3.136e-10, 3.184e-10, 3.234e-10, 3.285e-10,
4667 3.337e-10, 3.391e-10, 3.447e-10, 3.505e-10, 3.564e-10,
4668 3.626e-10, 3.689e-10, 3.754e-10, 3.822e-10, 3.892e-10,
4669 3.965e-10, 4.041e-10, 4.120e-10, 4.203e-10, 4.290e-10,
4670 4.381e-10, 4.478e-10, 4.581e-10, 4.691e-10, 4.807e-10,
4671 4.931e-10, 5.062e-10, 5.200e-10, 5.346e-10, 5.499e-10,
4672 5.659e-10, 5.826e-10, 6.002e-10, 6.189e-10, 6.392e-10,
4673 6.606e-10, 6.834e-10, 7.080e-10, 7.348e-10, 7.643e-10,
4674 7.974e-10, 8.351e-10, 8.791e-10, 9.301e-10, 9.894e-10,
4675 1.059e-09, 1.140e-09, 1.235e-09, 1.346e-09, 1.472e-09,
4676 1.616e-09, 1.777e-09, 1.954e-09, 2.147e-09, 2.347e-09,
4677 2.549e-09, 2.747e-09, 2.941e-09, 3.126e-09, 3.309e-09,
4678 3.589e-09, 3.848e-09, 4.066e-09, 4.238e-09, 4.365e-09,
4679 4.445e-09, 4.481e-09, 4.474e-09, 4.426e-09, 4.341e-09,
4680 4.223e-09, 4.076e-09, 3.905e-09, 3.717e-09, 3.516e-09,
4681 3.308e-09, 3.100e-09, 2.897e-09, 2.701e-09, 2.514e-09,
4682 2.332e-09, 2.156e-09, 1.985e-09, 1.819e-09, 1.659e-09,
4683 1.635e-09, 1.630e-09, 1.634e-09, 1.642e-09, 1.654e-09,
4684 1.668e-09, 1.685e-09, 1.705e-09, 1.728e-09, 1.754e-09,
4685 1.785e-09, 1.819e-09, 1.859e-09, 1.903e-09, 1.952e-09,
4686 2.007e-09, 2.068e-09, 2.134e-09, 2.207e-09, 2.287e-09,
4687 2.374e-09, 2.469e-09, 2.573e-09, 2.686e-09, 2.810e-09,
4688 2.947e-09, 3.098e-09, 3.285e-09, 3.494e-09, 3.729e-09,
4689 3.999e-09, 4.311e-09, 4.677e-09, 5.110e-09, 5.628e-09,
4690 6.239e-09, 6.963e-09, 7.806e-09, 8.772e-09, 9.860e-09,
4691 1.106e-08, 1.236e-08, 1.375e-08, 1.519e-08, 1.666e-08,
4692 1.817e-08, 1.962e-08, 2.240e-08, 2.516e-08, 2.762e-08,
4693 2.977e-08, 3.157e-08, 3.303e-08, 3.411e-08, 3.479e-08,
4694 3.524e-08, 3.533e-08, 3.506e-08, 3.445e-08, 3.353e-08,
4695 3.236e-08, 3.096e-08, 2.939e-08, 2.769e-08, 2.589e-08,
4696 2.404e-08, 2.215e-08, 2.024e-08, 1.832e-08, 1.640e-08,
4697 1.449e-08, 1.261e-08, 1.203e-08, 1.188e-08, 1.185e-08,
4698 1.188e-08, 1.195e-08, 1.205e-08, 1.216e-08, 1.228e-08,
4699 1.250e-08, 1.278e-08, 1.307e-08, 1.337e-08, 1.369e-08,
4700 1.402e-08, 1.436e-08, 1.474e-08, 1.513e-08, 1.556e-08,
4701 1.601e-08, 1.651e-08, 1.703e-08, 1.760e-08, 1.821e-08,
4702 1.886e-08, 1.957e-08, 2.032e-08, 2.119e-08, 2.213e-08,
4703 2.313e-08, 2.420e-08, 2.534e-08, 2.656e-08, 2.785e-08,
4704 2.923e-08, 3.070e-08, 3.228e-08, 3.396e-08, 3.577e-08,
4705 3.772e-08, 3.981e-08, 4.207e-08, 4.451e-08, 4.715e-08,
4706 5.001e-08, 5.313e-08, 5.654e-08, 6.027e-08, 6.438e-08,
4707 6.891e-08, 7.395e-08, 7.959e-08, 8.594e-08, 9.315e-08,
4708 1.014e-07, 1.109e-07, 1.220e-07, 1.351e-07, 1.506e-07,
4709 1.691e-07, 1.914e-07, 2.184e-07, 2.511e-07, 2.910e-07,
4710 3.396e-07, 3.986e-07, 4.703e-07, 5.565e-07, 6.598e-07,
4711 7.824e-07, 9.260e-07, 1.092e-06, 1.282e-06, 1.495e-06,
4712 1.730e-06, 1.984e-06, 2.254e-06, 2.533e-06, 2.816e-06,
4713 3.100e-06, 3.386e-06, 3.683e-06, 3.999e-06, 4.343e-06,
4714 4.721e-06, 5.140e-06, 5.603e-06, 6.119e-06, 6.699e-06,
4715 7.361e-06, 8.132e-06, 9.049e-06, 1.017e-05, 1.155e-05,
4716 1.329e-05, 1.549e-05, 1.827e-05, 2.178e-05, 2.619e-05,
4717 3.169e-05, 3.845e-05, 4.668e-05, 5.656e-05, 6.822e-05,
4718 8.175e-05, 9.719e-05, 1.145e-04, 1.334e-04, 1.537e-04,
4719 1.748e-04, 1.960e-04, 2.167e-04, 2.363e-04, 2.549e-04,
4720 2.731e-04, 2.911e-04, 3.094e-04, 3.277e-04, 3.458e-04,
4721 3.629e-04, 3.782e-04, 3.910e-04, 4.003e-04, 4.058e-04,
4722 4.069e-04, 4.038e-04, 3.964e-04, 3.853e-04, 3.709e-04,
4723 3.538e-04, 3.348e-04, 3.143e-04, 2.928e-04, 2.707e-04,
4724 2.481e-04, 2.250e-04, 2.010e-04, 1.760e-04, 1.504e-04,
4725 1.250e-04, 1.010e-04, 7.907e-05, 6.005e-05, 4.430e-05,
4726 3.180e-05, 2.231e-05, 1.544e-05, 1.069e-05, 7.481e-06,
4727 5.397e-06, 4.055e-06, 3.178e-06, 2.581e-06, 2.153e-06,
4728 1.827e-06, 1.568e-06, 1.357e-06, 1.182e-06, 1.035e-06,
4729 9.114e-07, 8.059e-07, 7.156e-07, 6.378e-07, 5.706e-07,
4730 5.122e-07, 4.612e-07, 4.165e-07, 3.771e-07, 3.424e-07,
4731 3.116e-07, 2.843e-07, 2.599e-07, 2.381e-07, 2.186e-07,
4732 2.010e-07, 1.852e-07, 1.709e-07, 1.580e-07, 1.463e-07,
4733 1.356e-07, 1.259e-07, 1.171e-07, 1.090e-07, 1.017e-07,
4734 9.489e-08, 8.868e-08, 8.297e-08, 7.772e-08, 7.288e-08,
4735 6.841e-08, 6.428e-08, 6.045e-08, 5.691e-08, 5.362e-08,
4736 5.057e-08, 4.773e-08, 4.508e-08, 4.262e-08, 4.032e-08,
4737 3.818e-08, 3.617e-08, 3.430e-08, 3.255e-08, 3.090e-08,
4738 2.936e-08, 2.791e-08, 2.655e-08, 2.527e-08, 2.407e-08,
4739 2.294e-08, 2.187e-08, 2.087e-08, 1.992e-08, 1.902e-08,
4740 1.818e-08, 1.738e-08, 1.662e-08, 1.590e-08, 1.522e-08,
4741 1.458e-08, 1.397e-08, 1.339e-08, 1.284e-08, 1.232e-08,
4742 1.183e-08, 1.136e-08, 1.091e-08, 1.048e-08, 1.008e-08,
4743 9.691e-09, 9.322e-09, 8.971e-09, 8.636e-09, 8.316e-09,
4744 8.011e-09, 7.720e-09, 7.441e-09, 7.175e-09, 6.921e-09,
4745 6.677e-09, 6.444e-09, 6.221e-09, 6.008e-09, 5.803e-09,
4746 5.607e-09, 5.419e-09, 5.239e-09, 5.066e-09, 4.900e-09,
4747 4.740e-09, 4.587e-09, 4.440e-09, 4.299e-09, 4.163e-09,
4748 4.033e-09, 3.907e-09, 3.787e-09, 3.671e-09, 3.559e-09,
4749 3.451e-09, 3.347e-09, 3.247e-09, 3.151e-09, 3.058e-09,
4750 2.969e-09, 2.883e-09, 2.799e-09, 2.719e-09, 2.642e-09,
4751 2.567e-09, 2.495e-09, 2.425e-09, 2.357e-09, 2.292e-09,
4752 2.229e-09, 2.169e-09, 2.110e-09, 2.053e-09, 1.998e-09,
4753 1.945e-09, 1.893e-09, 1.843e-09, 1.795e-09, 1.748e-09,
4754 1.703e-09, 1.659e-09, 1.617e-09, 1.576e-09, 1.536e-09,
4755 1.497e-09, 1.460e-09, 1.424e-09, 1.388e-09, 1.354e-09,
4756 1.321e-09, 1.289e-09, 1.258e-09, 1.227e-09, 1.198e-09,
4757 1.169e-09, 1.142e-09, 1.115e-09, 1.088e-09, 1.063e-09,
4758 1.038e-09, 1.014e-09, 9.908e-10, 9.681e-10, 9.460e-10,
4759 9.246e-10, 9.037e-10, 8.834e-10, 8.636e-10, 8.444e-10,
4760 8.257e-10, 8.074e-10, 7.897e-10, 7.724e-10, 7.556e-10,
4761 7.393e-10, 7.233e-10, 7.078e-10, 6.927e-10, 6.779e-10,
4762 6.636e-10, 6.496e-10, 6.359e-10, 6.226e-10, 6.097e-10,
4763 5.970e-10, 5.847e-10, 5.727e-10, 5.610e-10, 5.495e-10,
4764 5.384e-10, 5.275e-10, 5.169e-10, 5.065e-10, 4.964e-10,
4765 4.865e-10, 4.769e-10, 4.675e-10, 4.583e-10, 4.493e-10,
4766 4.406e-10, 4.320e-10, 4.236e-10, 4.155e-10, 4.075e-10,
4767 3.997e-10, 3.921e-10, 3.846e-10, 3.774e-10, 3.703e-10,
4768 3.633e-10, 3.565e-10, 3.499e-10, 3.434e-10, 3.370e-10,
4769 3.308e-10, 3.248e-10, 3.188e-10, 3.130e-10, 3.073e-10,
4770 3.018e-10, 2.963e-10, 2.910e-10, 2.858e-10, 2.807e-10,
4771 2.757e-10, 2.708e-10, 2.660e-10, 2.613e-10, 2.567e-10,
4772 2.523e-10, 2.479e-10, 2.436e-10, 2.393e-10, 2.352e-10,
4773 2.312e-10, 2.272e-10, 2.233e-10, 2.195e-10, 2.158e-10,
4774 2.121e-10, 2.086e-10, 2.051e-10, 2.016e-10, 1.983e-10,
4775 1.950e-10, 1.917e-10, 1.886e-10, 1.855e-10, 1.824e-10,
4776 1.794e-10, 1.765e-10, 1.736e-10, 1.708e-10, 1.680e-10,
4777 1.653e-10, 1.627e-10, 1.601e-10, 1.575e-10, 1.550e-10,
4778 1.525e-10, 1.501e-10, 1.478e-10, 1.454e-10, 1.431e-10,
4779 1.409e-10, 1.387e-10, 1.366e-10, 1.344e-10, 1.324e-10,
4780 1.303e-10, 1.283e-10, 1.264e-10, 1.244e-10, 1.225e-10,
4781 1.207e-10, 1.189e-10, 1.171e-10, 1.153e-10, 1.136e-10,
4782 1.119e-10, 1.102e-10, 1.086e-10, 1.070e-10, 1.054e-10,
4783 1.039e-10, 1.023e-10, 1.008e-10, 9.937e-11, 9.793e-11,
4784 9.651e-11, 9.512e-11, 9.375e-11, 9.241e-11, 9.109e-11,
4785 8.979e-11, 8.852e-11, 8.726e-11, 8.603e-11, 8.483e-11,
4786 8.364e-11, 8.247e-11, 8.132e-11, 8.020e-11, 7.909e-11,
4787 7.800e-11, 7.693e-11, 7.588e-11, 7.485e-11, 7.384e-11,
4788 7.284e-11, 7.186e-11, 7.090e-11, 6.995e-11, 6.902e-11,
4789 6.811e-11, 6.721e-11, 6.633e-11, 6.546e-11, 6.461e-11,
4790 6.377e-11, 6.295e-11, 6.214e-11, 6.135e-11, 6.057e-11,
4791 5.980e-11, 5.905e-11, 5.831e-11, 5.758e-11, 5.687e-11,
4792 5.617e-11, 5.548e-11, 5.481e-11, 5.415e-11, 5.350e-11,
4793 5.286e-11, 5.224e-11, 5.163e-11, 5.103e-11, 5.045e-11,
4794 4.989e-11, 4.934e-11, 4.881e-11, 4.830e-11, 4.781e-11,
4795 4.734e-11, 4.689e-11, 4.646e-11, 4.605e-11, 4.565e-11,
4796 4.527e-11, 4.489e-11, 4.453e-11, 4.417e-11, 4.381e-11,
4797 4.346e-11, 4.312e-11, 4.279e-11, 4.247e-11, 4.216e-11,
4798 4.187e-11, 4.160e-11, 4.136e-11, 4.114e-11, 4.097e-11,
4799 4.084e-11, 4.075e-11, 4.073e-11, 4.077e-11, 4.089e-11,
4800 4.110e-11, 4.142e-11, 4.185e-11, 4.238e-11, 4.301e-11,
4801 4.372e-11, 4.448e-11, 4.527e-11, 4.604e-11, 4.677e-11,
4802 4.742e-11, 4.798e-11, 4.844e-11, 4.879e-11, 4.905e-11,
4803 4.924e-11, 4.936e-11, 4.940e-11, 4.939e-11, 4.937e-11,
4804 4.935e-11, 4.938e-11, 4.946e-11, 4.963e-11, 4.987e-11,
4805 5.018e-11, 5.057e-11, 5.100e-11, 5.147e-11, 5.195e-11,
4806 5.242e-11, 5.285e-11, 5.321e-11, 5.346e-11, 5.358e-11,
4807 5.352e-11, 5.327e-11, 5.283e-11, 5.217e-11, 5.133e-11,
4808 5.034e-11, 4.918e-11, 4.786e-11, 4.643e-11, 4.492e-11,
4809 4.338e-11, 4.186e-11, 4.042e-11, 3.908e-11, 3.789e-11,
4810 3.685e-11, 3.598e-11, 3.527e-11, 3.472e-11, 3.430e-11,
4811 3.402e-11, 3.385e-11, 3.379e-11, 3.382e-11, 3.395e-11,
4812 3.420e-11, 3.466e-11, 3.519e-11, 3.579e-11, 3.645e-11,
4813 3.718e-11, 3.798e-11, 3.886e-11, 3.982e-11, 4.088e-11,
4814 4.204e-11, 4.331e-11, 4.471e-11, 4.626e-11, 4.800e-11,
4815 4.996e-11, 5.219e-11, 5.475e-11, 5.769e-11, 6.108e-11,
4816 6.494e-11, 6.930e-11, 7.414e-11, 7.941e-11, 8.501e-11,
4817 9.086e-11, 9.693e-11, 1.029e-10, 1.087e-10, 1.142e-10,
4818 1.193e-10, 1.240e-10, 1.282e-10, 1.342e-10, 1.412e-10,
4819 1.485e-10, 1.559e-10, 1.639e-10, 1.725e-10, 1.821e-10,
4820 1.928e-10, 2.047e-10, 2.175e-10, 2.312e-10, 2.454e-10,
4821 2.596e-10, 2.735e-10, 2.867e-10, 2.988e-10, 3.094e-10,
4822 3.182e-10, 3.248e-10, 3.291e-10, 3.308e-10, 3.298e-10,
4823 3.260e-10, 3.195e-10, 3.101e-10, 3.000e-10, 2.891e-10,
4824 2.769e-10, 2.635e-10, 2.493e-10, 2.347e-10, 2.204e-10,
4825 2.068e-10, 1.944e-10, 1.836e-10, 1.746e-10, 1.675e-10,
4826 1.622e-10, 1.586e-10, 1.565e-10, 1.559e-10, 1.564e-10,
4827 1.579e-10, 1.604e-10, 1.636e-10, 1.675e-10, 1.721e-10,
4828 1.774e-10, 1.833e-10, 1.899e-10, 1.973e-10, 2.055e-10,
4829 2.146e-10, 2.247e-10, 2.360e-10, 2.486e-10, 2.626e-10,
4830 2.784e-10, 2.960e-10, 3.158e-10, 3.380e-10, 3.630e-10,
4831 3.913e-10, 4.234e-10, 4.599e-10, 5.020e-10, 5.507e-10,
4832 6.075e-10, 6.737e-10, 7.509e-10, 8.409e-10, 9.452e-10,
4833 1.066e-09, 1.203e-09, 1.360e-09, 1.535e-09, 1.730e-09,
4834 1.945e-09, 2.179e-09, 2.436e-09, 2.721e-09, 3.044e-09,
4835 3.417e-09, 3.853e-09, 4.362e-09, 4.955e-09, 5.639e-09,
4836 6.417e-09, 7.287e-09, 8.241e-09, 9.269e-09, 1.035e-08,
4837 1.145e-08, 1.256e-08, 1.365e-08, 1.475e-08, 1.589e-08,
4838 1.710e-08, 1.842e-08, 1.988e-08, 2.149e-08, 2.326e-08,
4839 2.520e-08, 2.731e-08, 2.962e-08, 3.215e-08, 3.498e-08,
4840 3.823e-08, 4.199e-08, 4.646e-08, 5.180e-08, 5.819e-08,
4841 6.582e-08, 7.484e-08, 8.539e-08, 9.756e-08, 1.114e-07,
4842 1.270e-07, 1.443e-07, 1.635e-07, 1.848e-07, 2.090e-07,
4843 2.371e-07, 2.706e-07, 3.111e-07, 3.601e-07, 4.190e-07,
4844 4.892e-07, 5.717e-07, 6.668e-07, 7.748e-07, 8.947e-07,
4845 1.025e-06, 1.162e-06, 1.301e-06, 1.439e-06, 1.570e-06,
4846 1.692e-06, 1.808e-06, 1.920e-06, 2.034e-06, 2.150e-06,
4847 2.269e-06, 2.386e-06, 2.499e-06, 2.600e-06, 2.684e-06,
4848 2.746e-06, 2.781e-06, 2.788e-06, 2.768e-06, 2.720e-06,
4849 2.648e-06, 2.556e-06, 2.448e-06, 2.328e-06, 2.198e-06,
4850 2.063e-06, 1.923e-06, 1.779e-06, 1.628e-06, 1.469e-06,
4851 1.300e-06, 1.126e-06, 9.526e-07, 7.885e-07, 6.394e-07,
4852 5.112e-07, 4.064e-07, 3.262e-07, 2.698e-07, 2.352e-07,
4853 2.206e-07, 2.235e-07, 2.429e-07, 2.784e-07, 3.302e-07,
4854 3.995e-07, 4.880e-07, 5.968e-07, 7.277e-07, 8.811e-07,
4855 1.056e-06, 1.251e-06, 1.461e-06, 1.680e-06, 1.901e-06,
4856 2.116e-06, 2.321e-06, 2.519e-06, 2.715e-06, 2.913e-06,
4857 3.115e-06, 3.321e-06, 3.526e-06, 3.724e-06, 3.905e-06,
4858 4.059e-06, 4.181e-06, 4.261e-06, 4.295e-06, 4.283e-06,
4859 4.225e-06, 4.126e-06, 3.991e-06, 3.826e-06, 3.637e-06,
4860 3.432e-06, 3.215e-06, 2.989e-06, 2.755e-06, 2.511e-06,
4861 2.254e-06, 1.985e-06, 1.706e-06, 1.429e-06, 1.166e-06,
4862 9.250e-07, 7.135e-07, 5.356e-07, 3.921e-07, 2.814e-07,
4863 1.988e-07, 1.398e-07, 9.915e-08, 7.137e-08, 5.280e-08,
4864 4.038e-08, 3.192e-08, 2.601e-08, 2.164e-08, 1.836e-08,
4865 1.578e-08, 1.371e-08, 1.199e-08, 1.056e-08, 9.353e-09,
4866 8.321e-09, 7.436e-09, 6.672e-09, 6.010e-09, 5.433e-09,
4867 4.929e-09, 4.487e-09, 4.098e-09, 3.754e-09, 3.448e-09,
4868 3.174e-09, 2.929e-09, 2.708e-09, 2.507e-09, 2.325e-09,
4869 2.159e-09, 2.006e-09, 1.866e-09, 1.738e-09, 1.619e-09,
4870 1.510e-09, 1.409e-09, 1.316e-09, 1.230e-09, 1.149e-09,
4871 1.074e-09, 1.003e-09, 9.372e-10, 8.757e-10, 8.186e-10,
4872 7.661e-10, 7.179e-10, 6.740e-10, 6.339e-10, 5.974e-10,
4873 5.641e-10, 5.335e-10, 5.053e-10, 4.791e-10, 4.548e-10,
4874 4.321e-10, 4.109e-10, 3.909e-10, 3.722e-10, 3.546e-10,
4875 3.380e-10, 3.224e-10, 3.076e-10, 2.936e-10, 2.804e-10,
4876 2.680e-10, 2.562e-10, 2.451e-10, 2.346e-10, 2.246e-10,
4877 2.153e-10, 2.064e-10, 1.981e-10, 1.901e-10, 1.826e-10,
4878 1.755e-10, 1.687e-10, 1.623e-10, 1.562e-10, 1.503e-10,
4879 1.448e-10, 1.395e-10, 1.344e-10, 1.296e-10, 1.250e-10,
4880 1.206e-10, 1.165e-10, 1.125e-10, 1.087e-10, 1.050e-10,
4881 1.015e-10, 9.822e-11, 9.506e-11, 9.203e-11, 8.915e-11,
4882 8.640e-11, 8.377e-11, 8.127e-11, 7.888e-11, 7.660e-11,
4883 7.442e-11, 7.234e-11, 7.035e-11, 6.844e-11, 6.661e-11,
4884 6.486e-11, 6.316e-11, 6.154e-11, 5.998e-11, 5.850e-11,
4885 5.710e-11, 5.582e-11, 5.460e-11, 5.344e-11, 5.234e-11,
4886 5.132e-11, 5.040e-11, 4.961e-11, 4.896e-11, 4.845e-11,
4887 4.806e-11, 4.774e-11, 4.742e-11, 4.702e-11, 4.652e-11,
4888 4.594e-11, 4.527e-11, 4.451e-11, 4.366e-11, 4.274e-11,
4889 4.172e-11, 4.063e-11, 3.946e-11, 3.822e-11, 3.693e-11,
4890 3.560e-11, 3.428e-11, 3.293e-11, 3.155e-11, 3.014e-11,
4891 2.872e-11, 2.734e-11, 2.603e-11, 2.482e-11, 2.376e-11,
4892 2.286e-11, 2.211e-11, 2.146e-11, 2.088e-11, 2.032e-11,
4893 1.980e-11, 1.930e-11, 1.882e-11, 1.836e-11, 1.792e-11,
4894 1.749e-11, 1.708e-11, 1.669e-11, 1.630e-11, 1.593e-11,
4895 1.557e-11, 1.522e-11, 1.488e-11, 1.456e-11, 1.424e-11,
4896 1.392e-11, 1.362e-11, 1.333e-11, 1.304e-11, 1.276e-11,
4897 1.249e-11, 1.223e-11, 1.197e-11, 1.172e-11, 1.147e-11,
4898 1.124e-11, 1.100e-11, 1.078e-11, 1.056e-11, 1.034e-11,
4899 1.013e-11, 9.924e-12, 9.723e-12, 9.528e-12, 9.336e-12,
4900 9.149e-12, 8.967e-12, 8.789e-12, 8.615e-12, 8.445e-12,
4901 8.278e-12, 8.116e-12, 7.957e-12, 7.802e-12, 7.650e-12,
4902 7.502e-12, 7.357e-12, 7.215e-12, 7.076e-12, 6.940e-12,
4903 6.807e-12, 6.677e-12, 6.550e-12, 6.426e-12, 6.304e-12,
4904 6.185e-12, 6.068e-12, 5.954e-12, 5.842e-12, 5.732e-12,
4905 5.625e-12, 5.520e-12, 5.417e-12, 5.316e-12, 5.217e-12,
4906 5.121e-12, 5.026e-12, 4.933e-12, 4.842e-12, 4.753e-12,
4907 4.665e-12, 4.580e-12, 4.496e-12, 4.414e-12, 4.333e-12,
4908 4.254e-12, 4.176e-12, 4.100e-12, 4.025e-12, 3.952e-12,
4909 3.880e-12, 3.810e-12, 3.741e-12, 3.673e-12, 3.607e-12,
4910 3.542e-12, 3.478e-12, 3.415e-12, 3.353e-12, 3.293e-12,
4911 3.233e-12, 3.175e-12, 3.118e-12, 3.062e-12, 3.007e-12,
4912 2.953e-12, 2.899e-12, 2.847e-12, 2.796e-12, 2.746e-12,
4913 2.696e-12, 2.648e-12, 2.600e-12, 2.554e-12, 2.508e-12,
4914 2.463e-12, 2.418e-12, 2.375e-12, 2.332e-12, 2.290e-12,
4915 2.249e-12, 2.208e-12, 2.168e-12, 2.129e-12, 2.090e-12,
4916 2.053e-12, 2.015e-12, 1.979e-12, 1.943e-12, 1.908e-12,
4917 1.873e-12, 1.839e-12, 1.805e-12, 1.772e-12, 1.740e-12,
4918 1.708e-12, 1.677e-12, 1.646e-12, 1.616e-12, 1.586e-12,
4919 1.557e-12, 1.528e-12, 1.500e-12, 1.472e-12, 1.445e-12,
4920 1.418e-12, 1.391e-12, 1.365e-12, 1.340e-12, 1.314e-12,
4921 1.290e-12, 1.265e-12, 1.241e-12, 1.218e-12, 1.195e-12,
4922 1.172e-12, 1.150e-12, 1.128e-12, 1.106e-12, 1.085e-12,
4923 1.064e-12, 1.043e-12, 1.023e-12, 1.003e-12, 9.835e-13,
4924 9.643e-13, 9.453e-13, 9.267e-13, 9.084e-13, 8.904e-13,
4925 8.727e-13, 8.553e-13, 8.382e-13, 8.213e-13, 8.048e-13,
4926 7.885e-13, 7.725e-13, 7.568e-13, 7.414e-13, 7.262e-13,
4927 7.113e-13, 6.966e-13, 6.822e-13, 6.680e-13, 6.541e-13,
4928 6.404e-13, 6.270e-13, 6.138e-13, 6.009e-13, 5.882e-13,
4929 5.757e-13, 5.634e-13, 5.514e-13, 5.396e-13, 5.280e-13,
4930 5.167e-13, 5.055e-13, 4.946e-13, 4.839e-13, 4.734e-13,
4931 4.631e-13, 4.531e-13, 4.432e-13, 4.336e-13, 4.241e-13,
4932 4.149e-13, 4.059e-13, 3.971e-13, 3.885e-13, 3.801e-13,
4933 3.720e-13, 3.640e-13, 3.562e-13, 3.487e-13, 3.414e-13,
4934 3.342e-13, 3.274e-13, 3.207e-13, 3.142e-13, 3.080e-13,
4935 3.020e-13, 2.963e-13, 2.908e-13, 2.856e-13, 2.806e-13,
4936 2.759e-13, 2.715e-13, 2.673e-13, 2.635e-13, 2.600e-13,
4937 2.569e-13, 2.542e-13, 2.519e-13, 2.500e-13, 2.487e-13,
4938 2.479e-13, 2.477e-13, 2.483e-13, 2.498e-13, 2.524e-13,
4939 2.562e-13, 2.614e-13, 2.684e-13, 2.776e-13, 2.894e-13,
4940 3.045e-13, 3.235e-13, 3.472e-13, 3.765e-13, 4.123e-13,
4941 4.554e-13, 5.064e-13, 5.654e-13, 6.321e-13, 7.055e-13,
4942 7.844e-13, 8.666e-13, 9.498e-13, 1.032e-12, 1.111e-12,
4943 1.186e-12, 1.257e-12, 1.322e-12, 1.377e-12, 1.473e-12,
4944 1.580e-12, 1.690e-12, 1.806e-12, 1.930e-12, 2.066e-12,
4945 2.217e-12, 2.386e-12, 2.572e-12, 2.771e-12, 2.983e-12,
4946 3.199e-12, 3.414e-12, 3.619e-12, 3.810e-12, 3.980e-12,
4947 4.123e-12, 4.235e-12, 4.311e-12, 4.348e-12, 4.343e-12,
4948 4.296e-12, 4.204e-12, 4.069e-12, 3.891e-12, 3.711e-12,
4949 3.520e-12, 3.310e-12, 3.085e-12, 2.854e-12, 2.622e-12,
4950 2.400e-12, 2.198e-12, 2.022e-12, 1.879e-12, 1.772e-12,
4951 1.703e-12, 1.673e-12, 1.680e-12, 1.723e-12, 1.799e-12,
4952 1.911e-12, 2.055e-12, 2.231e-12, 2.440e-12, 2.683e-12,
4953 2.960e-12, 3.271e-12, 3.620e-12, 4.012e-12, 4.456e-12,
4954 4.958e-12, 5.520e-12, 6.142e-12, 6.818e-12, 7.538e-12,
4955 8.289e-12, 9.052e-12, 9.821e-12, 1.060e-11, 1.140e-11,
4956 1.226e-11, 1.320e-11, 1.426e-11, 1.547e-11, 1.686e-11,
4957 1.846e-11, 2.030e-11, 2.243e-11, 2.487e-11, 2.767e-11,
4958 3.089e-11, 3.452e-11, 3.858e-11, 4.305e-11, 4.791e-11,
4959 5.309e-11, 5.851e-11, 6.412e-11, 6.995e-11, 7.609e-11,
4960 8.271e-11, 8.987e-11, 9.758e-11, 1.058e-10, 1.146e-10,
4961 1.237e-10, 1.331e-10, 1.428e-10, 1.530e-10, 1.638e-10,
4962 1.755e-10, 1.886e-10, 2.036e-10, 2.212e-10, 2.418e-10,
4963 2.662e-10, 2.949e-10, 3.287e-10, 3.677e-10, 4.130e-10,
4964 4.648e-10, 5.232e-10, 5.877e-10, 6.574e-10, 7.307e-10,
4965 8.058e-10, 8.802e-10, 9.540e-10, 1.027e-09, 1.102e-09,
4966 1.181e-09, 1.268e-09, 1.365e-09, 1.476e-09, 1.601e-09,
4967 1.744e-09, 1.908e-09, 2.099e-09, 2.323e-09, 2.589e-09,
4968 2.904e-09, 3.278e-09, 3.721e-09, 4.237e-09, 4.828e-09,
4969 5.491e-09, 6.214e-09, 6.977e-09, 7.752e-09, 8.508e-09,
4970 9.225e-09, 9.899e-09, 1.055e-08, 1.120e-08, 1.187e-08,
4971 1.256e-08, 1.325e-08, 1.395e-08, 1.461e-08, 1.520e-08,
4972 1.569e-08, 1.605e-08, 1.626e-08, 1.631e-08, 1.620e-08,
4973 1.594e-08, 1.553e-08, 1.501e-08, 1.439e-08, 1.370e-08,
4974 1.296e-08, 1.219e-08, 1.139e-08, 1.055e-08, 9.668e-09,
4975 8.719e-09, 7.720e-09, 6.699e-09, 5.699e-09, 4.763e-09,
4976 3.920e-09, 3.193e-09, 2.592e-09, 2.116e-09, 1.754e-09,
4977 1.496e-09, 1.322e-09, 1.222e-09, 1.179e-09, 1.188e-09,
4978 1.242e-09, 1.341e-09, 1.488e-09, 1.691e-09, 1.963e-09,
4979 2.320e-09, 2.783e-09, 3.375e-09, 4.124e-09, 5.059e-09,
4980 6.212e-09, 7.615e-09, 9.297e-09, 1.128e-08, 1.359e-08,
4981 1.623e-08, 1.920e-08, 2.246e-08, 2.598e-08, 2.967e-08,
4982 3.341e-08, 3.709e-08, 4.060e-08, 4.393e-08, 4.715e-08,
4983 5.035e-08, 5.359e-08, 5.689e-08, 6.020e-08, 6.340e-08,
4984 6.637e-08, 6.892e-08, 7.091e-08, 7.222e-08, 7.275e-08,
4985 7.249e-08, 7.146e-08, 6.970e-08, 6.732e-08, 6.443e-08,
4986 6.112e-08, 5.751e-08, 5.370e-08, 4.974e-08, 4.570e-08,
4987 4.155e-08, 3.726e-08, 3.279e-08, 2.817e-08, 2.355e-08,
4988 1.910e-08, 1.501e-08, 1.141e-08, 8.412e-09, 6.023e-09,
4989 4.215e-09, 2.923e-09, 2.033e-09, 1.455e-09, 1.093e-09,
4990 8.740e-10, 7.431e-10, 6.659e-10, 6.264e-10, 6.148e-10,
4991 6.290e-10, 6.704e-10, 7.425e-10, 8.507e-10, 1.003e-09,
4992 1.207e-09, 1.473e-09, 1.814e-09, 2.240e-09, 2.764e-09,
4993 3.393e-09, 4.135e-09, 4.986e-09, 5.942e-09, 6.983e-09,
4994 8.082e-09, 9.200e-09, 1.030e-08, 1.135e-08, 1.236e-08,
4995 1.334e-08, 1.434e-08, 1.536e-08, 1.642e-08, 1.749e-08,
4996 1.854e-08, 1.954e-08, 2.042e-08, 2.114e-08, 2.167e-08,
4997 2.198e-08, 2.205e-08, 2.189e-08, 2.153e-08, 2.099e-08,
4998 2.030e-08, 1.949e-08, 1.859e-08, 1.763e-08, 1.662e-08,
4999 1.556e-08, 1.445e-08, 1.325e-08, 1.197e-08, 1.060e-08,
5000 9.205e-09, 7.832e-09, 6.544e-09, 5.383e-09, 4.378e-09,
5001 3.539e-09, 2.863e-09, 2.326e-09, 1.907e-09, 1.578e-09,
5002 1.311e-09, 1.088e-09, 8.975e-10, 7.318e-10, 5.895e-10,
5003 4.686e-10, 3.686e-10, 2.875e-10, 2.242e-10, 1.750e-10,
5004 1.380e-10, 1.104e-10, 8.948e-11, 7.378e-11, 6.180e-11,
5005 5.251e-11, 4.520e-11, 3.940e-11, 3.475e-11, 3.099e-11,
5006 2.792e-11, 2.537e-11, 2.323e-11, 2.141e-11, 1.985e-11,
5007 1.850e-11, 1.734e-11, 1.633e-11, 1.545e-11, 1.468e-11,
5008 1.399e-11, 1.338e-11, 1.281e-11, 1.228e-11, 1.179e-11,
5009 1.133e-11, 1.091e-11, 1.055e-11, 1.019e-11, 9.838e-12,
5010 9.494e-12, 9.161e-12, 8.845e-12, 8.544e-12, 8.258e-12,
5011 7.982e-12, 7.708e-12, 7.428e-12, 7.141e-12, 6.853e-12,
5012 6.574e-12, 6.319e-12, 6.101e-12, 5.933e-12, 5.825e-12,
5013 5.790e-12, 5.845e-12, 6.018e-12, 6.355e-12, 6.862e-12,
5014 7.521e-12, 8.372e-12, 9.455e-12, 1.076e-11, 1.231e-11,
5015 1.415e-11, 1.635e-11, 1.900e-11, 2.233e-11, 2.688e-11,
5016 3.335e-11, 4.316e-11, 5.277e-11, 6.203e-11, 7.088e-11,
5017 7.925e-11, 8.706e-11, 9.420e-11, 1.005e-10, 1.059e-10,
5018 1.101e-10, 1.130e-10, 1.145e-10, 1.146e-10, 1.132e-10,
5019 1.104e-10, 1.063e-10, 1.008e-10, 9.418e-11, 8.642e-11,
5020 7.766e-11, 6.805e-11, 5.779e-11, 4.724e-11, 3.706e-11,
5021 2.875e-11, 2.362e-11, 1.918e-11, 1.520e-11, 1.168e-11,
5022 8.671e-12, 6.195e-12, 4.263e-12, 2.844e-12, 1.873e-12,
5023 1.259e-12, 8.916e-13, 6.808e-13, 5.494e-13, 4.535e-13,
5024 3.758e-13, 3.113e-13, 2.571e-13, 2.110e-13, 1.714e-13,
5025 1.372e-13, 1.074e-13, 8.140e-14, 5.888e-14, 3.992e-14,
5026 2.574e-14, 2.098e-14, 1.985e-14, 1.894e-14, 1.804e-14,
5027 1.721e-14, 1.645e-14, 1.570e-14, 1.509e-14, 1.449e-14,
5028 1.389e-14, 1.336e-14, 1.291e-14, 1.238e-14, 1.200e-14,
5029 1.155e-14, 1.117e-14, 1.079e-14, 1.042e-14, 1.004e-14,
5030 9.736e-15, 9.434e-15, 9.132e-15, 8.830e-15, 8.604e-15,
5031 8.302e-15, 8.075e-15, 7.849e-15, 7.623e-15, 7.381e-15,
5032 7.170e-15, 6.974e-15, 6.777e-15, 6.589e-15, 6.408e-15,
5033 6.234e-15, 6.068e-15, 5.909e-15, 5.751e-15, 5.600e-15,
5034 5.457e-15, 5.321e-15, 5.185e-15, 5.057e-15, 4.928e-15,
5035 4.808e-15, 4.694e-15, 4.581e-15, 4.475e-15, 4.370e-15,
5036 4.272e-15, 4.174e-15, 4.083e-15, 3.992e-15, 3.909e-15,
5037 3.834e-15, 3.758e-15, 3.691e-15, 3.623e-15, 3.562e-15,
5038 3.509e-15, 3.464e-15, 3.426e-15, 3.396e-15, 3.374e-15,
5039 3.351e-15, 3.343e-15, 3.336e-15, 3.343e-15, 3.358e-15,
5040 3.374e-15, 3.396e-15, 3.434e-15, 3.472e-15, 3.517e-15,
5041 3.562e-15, 3.608e-15, 3.653e-15, 3.706e-15, 3.751e-15,
5042 3.437e-14, 7.989e-14, 1.282e-13, 1.776e-13, 2.263e-13,
5043 2.729e-13, 3.172e-13, 3.605e-13, 4.054e-13, 4.547e-13,
5044 5.102e-13, 5.724e-13, 6.399e-13, 7.079e-13, 7.639e-13,
5045 8.028e-13, 8.255e-13, 8.329e-13, 8.264e-13, 8.071e-13,
5046 7.764e-13, 7.358e-13, 6.868e-13, 6.310e-13, 5.700e-13,
5047 5.051e-13, 4.376e-13, 3.681e-13, 2.968e-13, 2.234e-13,
5048 1.473e-13, 6.888e-14, 3.200e-15, 3.147e-15, 3.087e-15,
5049 3.011e-15, 2.898e-15, 2.755e-15, 2.611e-15, 2.483e-15,
5050 2.392e-15, 2.340e-15, 2.317e-15, 2.317e-15, 2.332e-15,
5051 2.347e-15, 2.385e-15, 2.430e-15, 2.491e-15, 2.558e-15,
5052 2.619e-15, 3.956e-14, 8.813e-14, 1.397e-13, 1.926e-13,
5053 2.457e-13, 2.970e-13, 3.453e-13, 3.918e-13, 4.390e-13,
5054 4.899e-13, 5.472e-13, 6.123e-13, 6.845e-13, 7.615e-13,
5055 8.299e-13, 8.795e-13, 9.111e-13, 9.260e-13, 9.252e-13,
5056 9.099e-13, 8.817e-13, 8.421e-13, 7.925e-13, 7.350e-13,
5057 6.711e-13, 6.022e-13, 5.297e-13, 4.544e-13, 3.767e-13,
5058 2.965e-13, 2.132e-13, 1.265e-13, 3.808e-14, 2.408e-15,
5059 2.302e-15, 2.158e-15, 1.985e-15, 1.796e-15, 1.615e-15,
5060 1.449e-15, 1.313e-15, 1.177e-15, 1.057e-15, 9.509e-16,
5061 8.604e-16, 7.849e-16, 7.336e-16, 6.928e-16, 6.589e-16,
5062 6.257e-16, 5.947e-16, 5.698e-16, 5.494e-16, 5.321e-16,
5063 5.155e-16, 5.004e-16, 4.875e-16, 4.770e-16, 4.679e-16,
5064 4.604e-16, 4.528e-16, 4.475e-16, 4.430e-16, 4.408e-16,
5065 4.385e-16, 4.377e-16, 4.385e-16, 4.400e-16, 4.438e-16,
5066 4.498e-16, 4.574e-16, 4.664e-16, 4.777e-16, 4.936e-16,
5067 5.155e-16, 5.442e-16, 5.781e-16, 6.166e-16, 6.581e-16,
5068 7.011e-16, 7.479e-16, 8.000e-16, 8.528e-16, 9.057e-16,
5069 9.509e-16, 9.887e-16, 1.019e-15, 1.049e-15, 1.079e-15,
5070 1.117e-15, 1.170e-15, 1.230e-15, 1.291e-15, 1.351e-15,
5071 1.404e-15, 1.457e-15, 1.509e-15, 1.555e-15, 1.592e-15,
5072 1.623e-15, 1.645e-15, 1.660e-15, 1.660e-15, 1.660e-15,
5073 1.660e-15, 1.660e-15, 1.653e-15, 1.638e-15, 1.623e-15,
5074 1.608e-15, 1.585e-15, 1.555e-15, 1.532e-15, 1.502e-15,
5075 1.487e-15, 1.487e-15, 1.502e-15, 1.509e-15, 1.525e-15,
5076 1.540e-15, 1.547e-15, 1.547e-15, 1.555e-15, 1.570e-15,
5077 1.592e-15, 1.638e-15, 1.691e-15, 1.751e-15, 1.826e-15,
5078 1.917e-15, 2.015e-15, 2.136e-15, 2.264e-15, 2.408e-15,
5079 2.543e-15, 2.687e-15, 2.830e-15, 2.981e-15, 3.140e-15,
5080 3.321e-15, 3.517e-15, 1.344e-14, 5.071e-14, 9.298e-14,
5081 1.386e-13, 1.864e-13, 2.353e-13, 2.838e-13, 3.317e-13,
5082 3.798e-13, 4.276e-13, 4.770e-13, 5.299e-13, 5.879e-13,
5083 6.531e-13, 7.277e-13, 8.135e-13, 9.128e-13, 1.028e-12,
5084 1.163e-12, 1.320e-12, 1.506e-12, 1.723e-12, 1.983e-12,
5085 2.292e-12, 2.657e-12, 3.080e-12, 3.560e-12, 4.093e-12,
5086 4.664e-12, 5.252e-12, 5.837e-12, 6.395e-12, 6.924e-12,
5087 7.424e-12, 7.909e-12, 8.394e-12, 8.890e-12, 9.398e-12,
5088 9.911e-12, 1.042e-11, 1.092e-11, 1.140e-11, 1.184e-11,
5089 1.226e-11, 1.268e-11, 1.311e-11, 1.360e-11, 1.420e-11,
5090 1.499e-11, 1.603e-11, 1.740e-11, 1.916e-11, 2.136e-11,
5091 2.401e-11, 2.709e-11, 3.051e-11, 3.419e-11, 3.796e-11,
5092 4.166e-11, 4.519e-11, 4.858e-11, 5.189e-11, 5.528e-11,
5093 5.883e-11, 6.257e-11, 6.644e-11, 7.032e-11, 7.407e-11,
5094 7.751e-11, 8.044e-11, 8.273e-11, 8.424e-11, 8.491e-11,
5095 8.472e-11, 8.371e-11, 8.193e-11, 7.954e-11, 7.660e-11,
5096 7.327e-11, 6.964e-11, 6.579e-11, 6.175e-11, 5.748e-11,
5097 5.295e-11, 4.807e-11, 4.289e-11, 3.757e-11, 3.230e-11,
5098 2.731e-11, 2.278e-11, 1.881e-11, 1.546e-11, 1.273e-11,
5099 1.058e-11, 8.955e-12, 7.746e-12, 6.902e-12, 6.331e-12,
5100 5.989e-12, 5.820e-12, 5.808e-12, 5.927e-12, 6.175e-12,
5101 6.552e-12, 7.059e-12, 7.708e-12, 8.512e-12, 9.506e-12,
5102 1.072e-11, 1.220e-11, 1.402e-11, 1.623e-11, 1.889e-11,
5103 2.204e-11, 2.573e-11, 2.996e-11, 3.477e-11, 4.016e-11,
5104 4.617e-11, 5.289e-11, 6.051e-11, 6.933e-11, 7.972e-11,
5105 9.209e-11, 1.068e-10, 1.243e-10, 1.447e-10, 1.684e-10,
5106 1.953e-10, 2.254e-10, 2.582e-10, 2.933e-10, 3.297e-10,
5107 3.662e-10, 4.014e-10, 4.345e-10, 4.655e-10, 4.951e-10,
5108 5.248e-10, 5.554e-10, 5.872e-10, 6.200e-10, 6.526e-10,
5109 6.838e-10, 7.115e-10, 7.342e-10, 7.503e-10, 7.590e-10,
5110 7.597e-10, 7.526e-10, 7.380e-10, 7.170e-10, 6.905e-10,
5111 6.597e-10, 6.255e-10, 5.889e-10, 5.506e-10, 5.107e-10,
5112 4.691e-10, 4.252e-10, 3.786e-10, 3.296e-10, 2.797e-10,
5113 2.307e-10, 1.848e-10, 1.440e-10, 1.091e-10, 8.078e-11,
5114 5.881e-11, 4.268e-11, 3.141e-11, 2.402e-11, 1.953e-11,
5115 1.711e-11, 1.615e-11, 1.625e-11, 1.722e-11, 1.901e-11,
5116 2.170e-11, 2.541e-11, 3.033e-11, 3.670e-11, 4.480e-11,
5117 5.496e-11, 6.753e-11, 8.287e-11, 1.013e-10, 1.232e-10,
5118 1.486e-10, 1.776e-10, 2.100e-10, 2.453e-10, 2.826e-10,
5119 3.207e-10, 3.585e-10, 3.947e-10, 4.295e-10, 4.634e-10,
5120 4.975e-10, 5.327e-10, 5.691e-10, 6.066e-10, 6.440e-10,
5121 6.801e-10, 7.130e-10, 7.410e-10, 7.624e-10, 7.761e-10,
5122 7.814e-10, 7.782e-10, 7.670e-10, 7.483e-10, 7.233e-10,
5123 6.931e-10, 6.588e-10, 6.215e-10, 5.819e-10, 5.402e-10,
5124 4.966e-10, 4.506e-10, 4.017e-10, 3.503e-10, 2.981e-10,
5125 2.468e-10, 1.987e-10, 1.552e-10, 1.179e-10, 8.705e-11,
5126 6.278e-11, 4.457e-11, 3.136e-11, 2.219e-11, 1.601e-11,
5127 1.191e-11, 9.181e-12, 7.312e-12, 6.003e-12, 5.040e-12,
5128 4.304e-12, 3.722e-12, 3.250e-12, 2.861e-12, 2.533e-12,
5129 2.254e-12, 2.016e-12, 1.812e-12, 1.637e-12, 1.491e-12,
5130 1.370e-12, 1.275e-12, 1.205e-12, 1.164e-12, 1.153e-12,
5131 1.179e-12, 1.248e-12, 1.370e-12, 1.561e-12, 1.839e-12,
5132 2.232e-12, 2.761e-12, 3.467e-12, 4.391e-12, 5.580e-12,
5133 7.078e-12, 8.932e-12, 1.117e-11, 1.382e-11, 1.688e-11,
5134 2.031e-11, 2.403e-11, 2.792e-11, 3.188e-11, 3.573e-11,
5135 3.941e-11, 4.294e-11, 4.645e-11, 5.000e-11, 5.367e-11,
5136 5.743e-11, 6.123e-11, 6.491e-11, 6.837e-11, 7.141e-11,
5137 7.392e-11, 7.576e-11, 7.687e-11, 7.720e-11, 7.678e-11,
5138 7.567e-11, 7.396e-11, 7.187e-11, 6.938e-11, 6.665e-11,
5139 6.373e-11, 6.070e-11, 5.757e-11, 5.426e-11, 5.070e-11,
5140 4.683e-11, 4.269e-11, 3.841e-11, 3.420e-11, 3.020e-11,
5141 2.654e-11, 2.330e-11, 2.050e-11, 1.812e-11, 1.611e-11,
5142 1.439e-11, 1.291e-11, 1.158e-11, 1.037e-11, 9.206e-12,
5143 8.084e-12, 7.010e-12, 6.045e-12, 5.105e-12, 4.203e-12,
5144 3.363e-12, 2.610e-12, 1.964e-12, 1.429e-12, 1.009e-12,
5145 6.869e-13, 4.567e-13, 2.909e-13, 1.790e-13, 1.033e-13,
5146 5.183e-14, 1.809e-14, 8.906e-15, 8.151e-15, 7.472e-15,
5147 6.860e-15, 6.332e-15, 5.902e-15, 5.555e-15, 5.268e-15,
5148 5.019e-15, 4.808e-15, 4.657e-15, 4.551e-15, 4.483e-15,
5149 4.453e-15, 4.460e-15, 4.498e-15, 4.581e-15, 4.702e-15,
5150 4.860e-15, 5.049e-15, 5.275e-15, 5.540e-15, 5.864e-15,
5151 6.272e-15, 3.285e-14, 8.652e-14, 1.564e-13, 2.476e-13,
5152 3.706e-13, 5.518e-13, 8.262e-13, 1.265e-12, 1.708e-12,
5153 2.148e-12, 2.584e-12, 3.012e-12, 3.432e-12, 3.836e-12,
5154 4.219e-12, 4.571e-12, 4.879e-12, 5.133e-12, 5.322e-12,
5155 5.439e-12, 5.482e-12, 5.452e-12, 5.352e-12, 5.185e-12,
5156 4.955e-12, 4.666e-12, 4.323e-12, 3.935e-12, 3.511e-12,
5157 3.069e-12, 2.641e-12, 2.302e-12, 2.118e-12, 1.978e-12,
5158 1.874e-12, 1.809e-12, 1.787e-12, 1.812e-12, 1.888e-12,
5159 2.015e-12, 2.195e-12, 2.429e-12, 2.721e-12, 3.074e-12,
5160 3.495e-12, 3.990e-12, 4.564e-12, 5.216e-12, 5.943e-12,
5161 6.726e-12, 7.566e-12, 8.462e-12, 9.412e-12, 1.040e-11,
5162 1.142e-11, 1.244e-11, 1.342e-11, 1.433e-11, 1.519e-11,
5163 1.602e-11, 1.688e-11, 1.782e-11, 1.890e-11, 2.010e-11,
5164 2.139e-11, 2.268e-11, 2.375e-11, 2.445e-11, 2.481e-11,
5165 2.486e-11, 2.464e-11, 2.417e-11, 2.349e-11, 2.262e-11,
5166 2.157e-11, 2.038e-11, 1.908e-11, 1.770e-11, 1.626e-11,
5167 1.477e-11, 1.323e-11, 1.165e-11, 9.999e-12, 8.290e-12,
5168 6.576e-12, 4.935e-12, 3.475e-12, 2.280e-12, 1.419e-12,
5169 9.163e-13, 7.470e-13, 7.556e-13, 7.834e-13, 8.307e-13,
5170 8.969e-13, 9.822e-13, 1.088e-12, 1.215e-12, 1.367e-12,
5171 1.546e-12, 1.755e-12, 1.999e-12, 2.283e-12, 2.614e-12,
5172 2.998e-12, 3.446e-12, 3.968e-12, 4.576e-12, 5.280e-12,
5173 6.095e-12, 7.031e-12, 8.103e-12, 9.320e-12, 1.070e-11,
5174 1.225e-11, 1.400e-11, 1.600e-11, 1.825e-11, 2.082e-11,
5175 2.377e-11, 2.719e-11, 3.115e-11, 3.576e-11, 4.110e-11,
5176 4.725e-11, 5.425e-11, 6.219e-11, 7.118e-11, 8.133e-11,
5177 9.264e-11, 1.052e-10, 1.190e-10, 1.341e-10, 1.506e-10,
5178 1.684e-10, 1.879e-10, 2.094e-10, 2.339e-10, 2.624e-10,
5179 2.956e-10, 3.345e-10, 3.795e-10, 4.309e-10, 4.883e-10,
5180 5.499e-10, 6.166e-10, 6.887e-10, 7.664e-10, 8.495e-10,
5181 9.372e-10, 1.028e-09, 1.119e-09, 1.209e-09, 1.293e-09,
5182 1.372e-09, 1.448e-09, 1.526e-09, 1.612e-09, 1.711e-09,
5183 1.822e-09, 1.944e-09, 2.070e-09, 2.175e-09, 2.246e-09,
5184 2.287e-09, 2.298e-09, 2.285e-09, 2.248e-09, 2.190e-09,
5185 2.111e-09, 2.016e-09, 1.906e-09, 1.785e-09, 1.657e-09,
5186 1.521e-09, 1.382e-09, 1.238e-09, 1.089e-09, 9.341e-10,
5187 7.733e-10, 6.100e-10, 4.528e-10, 3.101e-10, 1.906e-10,
5188 1.028e-10, 4.896e-11, 2.904e-11, 2.392e-11, 1.984e-11,
5189 1.661e-11, 1.403e-11, 1.193e-11, 1.023e-11, 8.815e-12,
5190 7.641e-12, 6.658e-12, 5.828e-12, 5.123e-12, 4.521e-12,
5191 4.004e-12, 3.558e-12, 3.171e-12, 2.834e-12, 2.539e-12,
5192 2.280e-12, 2.052e-12, 1.850e-12, 1.671e-12, 1.512e-12,
5193 1.370e-12, 1.243e-12, 1.129e-12, 1.026e-12, 9.339e-13,
5194 8.504e-13, 7.748e-13, 7.063e-13, 6.440e-13, 5.872e-13,
5195 5.354e-13, 4.881e-13, 4.448e-13, 4.051e-13, 3.686e-13,
5196 3.351e-13, 3.042e-13, 2.757e-13, 2.494e-13, 2.252e-13,
5197 2.027e-13, 1.818e-13, 1.625e-13, 1.446e-13, 1.280e-13,
5198 1.125e-13, 9.815e-14, 8.481e-14, 7.242e-14, 6.095e-14,
5199 5.034e-14, 4.060e-14, 3.174e-14, 2.390e-14, 1.717e-14,
5200 1.206e-14, 1.034e-14, 9.811e-15, 9.358e-15, 8.906e-15,
5201 8.453e-15, 8.075e-15, 7.698e-15, 7.328e-15, 6.989e-15,
5202 6.664e-15, 6.355e-15, 6.068e-15, 5.796e-15, 5.540e-15,
5203 5.298e-15, 5.064e-15, 4.845e-15, 4.642e-15, 4.445e-15,
5204 4.257e-15, 4.075e-15, 3.909e-15, 3.743e-15, 3.592e-15,
5205 3.449e-15, 3.306e-15, 3.177e-15, 3.057e-15, 2.936e-15,
5206 2.823e-15, 2.709e-15, 2.611e-15, 2.513e-15, 2.415e-15,
5207 2.325e-15, 2.242e-15, 2.158e-15, 2.083e-15, 2.008e-15,
5208 1.940e-15, 1.872e-15, 1.804e-15, 1.743e-15, 1.691e-15,
5209 1.638e-15, 1.585e-15, 1.540e-15, 1.494e-15, 1.457e-15,
5210 1.419e-15, 1.389e-15, 1.358e-15, 1.343e-15, 1.321e-15,
5211 1.298e-15, 1.283e-15, 1.268e-15, 1.253e-15, 1.245e-15,
5212 5.862e-15, 3.288e-14, 6.265e-14, 9.326e-14, 1.234e-13,
5213 1.522e-13, 1.796e-13, 2.058e-13, 2.317e-13, 2.575e-13,
5214 2.833e-13, 3.087e-13, 3.328e-13, 3.550e-13, 3.742e-13,
5215 3.895e-13, 4.003e-13, 4.058e-13, 4.058e-13, 4.003e-13,
5216 3.895e-13, 3.742e-13, 3.548e-13, 3.324e-13, 3.077e-13,
5217 2.818e-13, 2.549e-13, 2.274e-13, 1.990e-13, 1.691e-13,
5218 1.374e-13, 1.040e-13, 6.996e-14, 3.648e-14, 5.560e-15,
5219 6.709e-16, 6.468e-16, 6.196e-16, 5.917e-16, 5.645e-16,
5220 5.396e-16, 5.162e-16, 4.928e-16, 4.717e-16, 4.528e-16,
5221 4.385e-16, 4.279e-16, 4.211e-16, 4.181e-16, 4.166e-16,
5222 4.166e-16, 4.189e-16, 4.226e-16, 4.279e-16, 4.370e-16,
5223 4.475e-16, 4.611e-16, 4.755e-16, 4.936e-16, 5.155e-16,
5224 5.426e-16, 5.736e-16, 6.060e-16, 6.453e-16, 6.928e-16,
5225 2.296e-14, 5.327e-14, 8.601e-14, 1.202e-13, 1.548e-13,
5226 1.892e-13, 2.235e-13, 2.581e-13, 2.945e-13, 3.339e-13,
5227 3.774e-13, 4.261e-13, 4.803e-13, 5.411e-13, 6.089e-13,
5228 6.851e-13, 7.711e-13, 8.691e-13, 9.818e-13, 1.112e-12,
5229 1.263e-12, 1.436e-12, 1.634e-12, 1.856e-12, 2.099e-12,
5230 2.358e-12, 2.625e-12, 2.889e-12, 3.139e-12, 3.373e-12,
5231 3.595e-12, 3.811e-12, 4.032e-12, 4.260e-12, 4.497e-12,
5232 4.736e-12, 4.970e-12, 5.185e-12, 5.369e-12, 5.511e-12,
5233 5.600e-12, 5.630e-12, 5.600e-12, 5.512e-12, 5.369e-12,
5234 5.181e-12, 4.955e-12, 4.699e-12, 4.424e-12, 4.134e-12,
5235 3.833e-12, 3.520e-12, 3.193e-12, 2.847e-12, 2.481e-12,
5236 2.103e-12, 1.730e-12, 1.375e-12, 1.053e-12, 7.751e-13,
5237 5.442e-13, 3.613e-13, 2.236e-13, 1.239e-13, 5.619e-14,
5238 1.470e-14, 4.747e-15, 4.483e-15, 4.279e-15, 4.158e-15,
5239 4.136e-15, 4.204e-15, 4.355e-15, 1.840e-14, 4.496e-14,
5240 8.112e-14, 1.284e-13, 1.892e-13, 2.667e-13, 3.638e-13,
5241 4.862e-13, 6.386e-13, 8.266e-13, 1.056e-12, 1.334e-12,
5242 1.665e-12, 2.055e-12, 2.506e-12, 3.021e-12, 3.595e-12,
5243 4.225e-12, 4.900e-12, 5.605e-12, 6.318e-12, 7.018e-12,
5244 7.688e-12, 8.326e-12, 8.949e-12, 9.578e-12, 1.023e-11,
5245 1.089e-11, 1.157e-11, 1.224e-11, 1.286e-11, 1.339e-11,
5246 1.380e-11, 1.407e-11, 1.418e-11, 1.412e-11, 1.390e-11,
5247 1.354e-11, 1.306e-11, 1.247e-11, 1.181e-11, 1.108e-11,
5248 1.032e-11, 9.520e-12, 8.700e-12, 7.857e-12, 6.985e-12,
5249 6.077e-12, 5.144e-12, 4.213e-12, 3.324e-12, 2.518e-12,
5250 1.820e-12, 1.251e-12, 8.129e-13, 4.967e-13, 2.819e-13,
5251 1.460e-13, 6.531e-14, 1.977e-14, 6.506e-15, 5.547e-15,
5252 4.740e-15, 4.113e-15, 3.645e-15, 3.291e-15, 3.004e-15,
5253 2.755e-15, 2.536e-15, 2.392e-15, 2.302e-15, 2.249e-15,
5254 2.219e-15, 2.226e-15, 2.264e-15, 2.340e-15, 2.445e-15,
5255 2.581e-15, 8.149e-15, 4.005e-14, 8.285e-14, 1.376e-13,
5256 2.056e-13, 2.892e-13, 3.902e-13, 5.099e-13, 6.488e-13,
5257 8.062e-13, 9.798e-13, 1.166e-12, 1.358e-12, 1.551e-12,
5258 1.737e-12, 1.915e-12, 2.088e-12, 2.261e-12, 2.440e-12,
5259 2.626e-12, 2.818e-12, 3.010e-12, 3.195e-12, 3.365e-12,
5260 3.508e-12, 3.618e-12, 3.689e-12, 3.718e-12, 3.705e-12,
5261 3.652e-12, 3.564e-12, 3.447e-12, 3.305e-12, 3.146e-12,
5262 2.973e-12, 2.790e-12, 2.600e-12, 2.400e-12, 2.189e-12,
5263 1.963e-12, 1.722e-12, 1.473e-12, 1.226e-12, 9.909e-13,
5264 7.778e-13, 5.938e-13, 4.407e-13, 3.182e-13, 2.235e-13,
5265 1.522e-13, 9.812e-14, 5.676e-14, 2.415e-14, 1.683e-15,
5266 1.434e-15, 1.238e-15, 1.079e-15, 9.434e-16, 8.302e-16,
5267 7.306e-16, 6.400e-16, 5.691e-16, 5.117e-16, 4.626e-16,
5268 4.166e-16, 3.743e-16, 3.411e-16, 3.132e-16, 2.891e-16,
5269 2.664e-16, 2.453e-16, 2.279e-16, 2.136e-16, 2.008e-16,
5270 1.887e-16, 1.781e-16, 1.698e-16, 1.623e-16, 1.562e-16,
5271 1.509e-16, 1.472e-16, 1.434e-16, 1.419e-16, 1.411e-16,
5272 1.419e-16, 1.434e-16, 1.457e-16, 1.502e-16, 1.570e-16,
5273 1.668e-16, 1.811e-16, 1.985e-16, 2.181e-16, 2.415e-16,
5274 2.664e-16, 2.966e-16, 3.313e-16, 3.675e-16, 4.030e-16,
5275 4.347e-16, 4.619e-16, 4.875e-16, 5.117e-16, 5.336e-16,
5276 5.540e-16, 5.706e-16, 5.849e-16, 5.977e-16, 6.113e-16,
5277 1.061e-14, 2.170e-14, 3.323e-14, 4.525e-14, 5.762e-14,
5278 7.011e-14, 8.221e-14, 9.352e-14, 1.034e-13, 1.115e-13,
5279 1.176e-13, 1.216e-13, 1.234e-13, 1.229e-13, 1.206e-13,
5280 1.170e-13, 1.127e-13, 1.081e-13, 1.038e-13, 1.002e-13,
5281 9.738e-14, 9.552e-14, 9.443e-14, 9.389e-14, 9.366e-14,
5282 9.377e-14, 9.433e-14, 9.567e-14, 9.768e-14, 1.005e-13,
5283 1.046e-13, 1.106e-13, 1.191e-13, 1.304e-13, 1.446e-13,
5284 1.611e-13, 1.789e-13, 1.960e-13, 2.106e-13, 2.203e-13,
5285 2.255e-13, 2.263e-13, 2.231e-13, 2.165e-13, 2.068e-13,
5286 1.945e-13, 1.800e-13, 1.637e-13, 1.462e-13, 1.278e-13,
5287 1.088e-13, 8.916e-14, 6.893e-14, 4.796e-14, 2.634e-14,
5288 4.974e-15, 8.151e-16, 8.302e-16, 8.453e-16, 8.679e-16,
5289 8.906e-16, 9.132e-16, 9.358e-16, 9.660e-16, 1.004e-15,
5290 1.057e-15, 1.125e-15, 1.200e-15, 1.291e-15, 1.389e-15,
5291 6.595e-15, 2.605e-14, 4.954e-14, 7.688e-14, 1.083e-13,
5292 1.441e-13, 1.841e-13, 2.286e-13, 2.772e-13, 3.294e-13,
5293 3.845e-13, 4.415e-13, 4.993e-13, 5.575e-13, 6.175e-13,
5294 6.813e-13, 7.524e-13, 8.335e-13, 9.256e-13, 1.029e-12,
5295 1.141e-12, 1.253e-12, 1.358e-12, 1.460e-12, 1.561e-12,
5296 1.663e-12, 1.770e-12, 1.884e-12, 2.005e-12, 2.136e-12,
5297 2.276e-12, 2.426e-12, 2.585e-12, 2.750e-12, 2.918e-12,
5298 3.082e-12, 3.243e-12, 3.398e-12, 3.558e-12, 3.735e-12,
5299 3.947e-12, 4.208e-12, 4.525e-12, 4.897e-12, 5.316e-12,
5300 5.752e-12, 6.174e-12, 6.589e-12, 7.013e-12, 7.462e-12,
5301 7.957e-12, 8.518e-12, 9.167e-12, 9.929e-12, 1.082e-11,
5302 1.187e-11, 1.309e-11, 1.449e-11, 1.607e-11, 1.782e-11,
5303 1.972e-11, 2.172e-11, 2.376e-11, 2.578e-11, 2.771e-11,
5304 2.956e-11, 3.140e-11, 3.336e-11, 3.556e-11, 3.809e-11,
5305 4.093e-11, 4.398e-11, 4.703e-11, 4.986e-11, 5.188e-11,
5306 5.313e-11, 5.366e-11, 5.352e-11, 5.277e-11, 5.147e-11,
5307 4.970e-11, 4.753e-11, 4.503e-11, 4.228e-11, 3.936e-11,
5308 3.631e-11, 3.316e-11, 2.993e-11, 2.661e-11, 2.317e-11,
5309 1.961e-11, 1.604e-11, 1.264e-11, 9.610e-12, 7.158e-12,
5310 5.460e-12, 4.584e-12, 4.502e-12, 5.024e-12, 5.734e-12,
5311 6.605e-12, 7.649e-12, 8.877e-12, 1.031e-11, 1.195e-11,
5312 1.382e-11, 1.593e-11, 1.828e-11, 2.090e-11, 2.377e-11,
5313 2.691e-11, 3.027e-11, 3.380e-11, 3.740e-11, 4.095e-11,
5314 4.430e-11, 4.743e-11, 5.043e-11, 5.352e-11, 5.687e-11,
5315 6.059e-11, 6.473e-11, 6.903e-11, 7.342e-11, 7.661e-11,
5316 7.866e-11, 7.963e-11, 7.959e-11, 7.862e-11, 7.683e-11,
5317 7.428e-11, 7.108e-11, 6.733e-11, 6.313e-11, 5.862e-11,
5318 5.389e-11, 4.904e-11, 4.412e-11, 3.915e-11, 3.410e-11,
5319 2.889e-11, 2.350e-11, 1.814e-11, 1.303e-11, 8.549e-12,
5320 4.950e-12, 2.450e-12, 1.118e-12, 8.048e-13, 6.484e-13,
5321 5.257e-13, 4.281e-13, 3.496e-13, 2.858e-13, 2.334e-13,
5322 1.900e-13, 1.538e-13, 1.235e-13, 9.783e-14, 7.609e-14,
5323 5.762e-14, 4.193e-14, 2.872e-14, 1.785e-14, 9.478e-15,
5324 6.702e-15, 6.045e-15, 5.502e-15, 5.034e-15, 4.611e-15,
5325 4.219e-15, 3.857e-15, 3.547e-15, 3.268e-15, 3.019e-15,
5326 2.792e-15, 2.574e-15, 2.385e-15, 2.219e-15, 2.060e-15,
5327 1.917e-15, 1.781e-15, 1.660e-15, 1.555e-15, 1.457e-15,
5328 1.358e-15, 1.268e-15, 1.192e-15, 1.117e-15, 1.049e-15,
5329 9.887e-16, 9.283e-16, 8.755e-16, 8.226e-16, 7.774e-16,
5330 7.343e-16, 6.928e-16, 6.551e-16, 6.204e-16, 5.872e-16,
5331 5.562e-16, 5.268e-16, 4.996e-16, 4.740e-16, 4.506e-16,
5332 4.279e-16, 4.060e-16, 3.864e-16, 3.675e-16, 3.502e-16,
5333 3.336e-16, 3.177e-16, 3.026e-16, 2.891e-16, 2.762e-16,
5334 2.634e-16, 2.513e-16, 2.400e-16, 2.302e-16, 2.196e-16,
5335 2.106e-16, 2.015e-16, 1.925e-16, 1.849e-16, 1.766e-16,
5336 1.698e-16, 1.623e-16, 1.562e-16, 1.494e-16, 1.434e-16,
5337 1.381e-16, 1.321e-16, 1.275e-16, 1.223e-16, 1.177e-16,
5338 1.132e-16, 1.087e-16, 1.049e-16, 1.004e-16, 9.660e-17,
5339 9.358e-17, 8.981e-17, 8.679e-17, 8.377e-17, 8.075e-17,
5340 7.774e-17, 7.479e-17, 7.215e-17, 6.966e-17, 6.725e-17,
5341 6.491e-17, 6.264e-17, 6.053e-17, 5.849e-17, 5.653e-17,
5342 5.457e-17, 5.275e-17, 5.102e-17, 4.936e-17, 4.777e-17,
5343 4.619e-17, 4.468e-17, 4.325e-17, 4.189e-17, 4.053e-17,
5344 3.925e-17, 3.804e-17, 3.683e-17, 3.570e-17, 3.457e-17,
5345 3.351e-17, 3.245e-17, 3.147e-17, 3.057e-17, 2.958e-17,
5346 2.875e-17, 2.785e-17, 2.702e-17, 2.626e-17, 2.551e-17,
5347 2.475e-17, 2.400e-17, 2.332e-17, 2.264e-17, 2.196e-17,
5348 2.136e-17, 2.075e-17, 2.015e-17, 1.962e-17, 1.902e-17,
5349 1.849e-17, 1.804e-17, 1.751e-17, 1.706e-17, 1.660e-17,
5350 1.615e-17, 1.570e-17, 1.525e-17, 1.487e-17, 1.442e-17,
5351 1.404e-17, 1.366e-17, 1.336e-17, 1.298e-17, 1.260e-17,
5352 1.230e-17, 1.200e-17, 1.170e-17, 1.140e-17, 1.109e-17,
5353 1.079e-17, 1.057e-17, 1.026e-17, 1.004e-17, 9.736e-18,
5354 9.509e-18, 9.283e-18, 9.057e-18, 8.830e-18, 8.604e-18,
5355 8.377e-18, 8.226e-18, 8.000e-18, 7.774e-18, 7.623e-18,
5356 7.419e-18, 7.245e-18, 7.072e-18, 6.906e-18, 6.740e-18,
5357 6.581e-18, 6.423e-18, 6.279e-18, 6.128e-18, 5.985e-18,
5358 5.849e-18, 5.713e-18, 5.585e-18, 5.457e-18, 5.328e-18,
5359 5.208e-18, 5.087e-18, 4.974e-18, 4.860e-18, 4.755e-18,
5360 4.649e-18, 4.543e-18, 4.445e-18, 4.347e-18, 4.249e-18,
5361 4.158e-18, 4.068e-18, 3.977e-18, 3.887e-18, 3.804e-18,
5362 3.721e-18, 3.645e-18, 3.562e-18, 3.487e-18, 3.411e-18,
5363 3.343e-18, 3.268e-18, 3.200e-18, 3.132e-18, 3.072e-18,
5364 3.004e-18, 2.943e-18, 2.883e-18, 2.823e-18, 2.762e-18,
5365 2.709e-18, 2.649e-18, 2.596e-18, 2.543e-18, 2.491e-18,
5366 2.445e-18, 2.392e-18, 2.347e-18, 2.302e-18, 2.257e-18,
5367 2.211e-18, 2.166e-18, 2.121e-18, 2.083e-18, 2.038e-18,
5368 2.000e-18, 1.962e-18, 1.925e-18, 1.887e-18, 1.849e-18,
5369 1.811e-18, 1.781e-18, 1.743e-18, 1.713e-18, 1.683e-18,
5370 1.645e-18, 1.615e-18, 1.585e-18, 1.555e-18, 1.525e-18,
5371 1.502e-18, 1.472e-18, 1.442e-18, 1.419e-18, 1.389e-18,
5372 1.366e-18, 1.343e-18, 1.321e-18, 1.291e-18, 1.268e-18,
5373 1.245e-18, 1.223e-18, 1.208e-18, 1.185e-18, 1.162e-18,
5374 1.140e-18, 1.125e-18, 1.102e-18, 1.087e-18, 1.064e-18,
5375 1.049e-18, 1.026e-18, 1.011e-18, 9.962e-19, 9.811e-19,
5376 9.585e-19, 9.434e-19, 9.283e-19, 9.132e-19, 8.981e-19,
5377 8.830e-19, 8.679e-19, 8.604e-19, 8.453e-19, 8.302e-19,
5378 8.151e-19, 8.075e-19, 7.925e-19, 7.774e-19, 7.698e-19,
5379 7.547e-19, 7.442e-19, 7.328e-19, 7.215e-19, 7.109e-19,
5380 7.011e-19, 6.906e-19, 6.808e-19, 6.709e-19, 6.611e-19,
5381 6.521e-19, 6.430e-19, 6.340e-19, 6.257e-19, 6.174e-19,
5382 6.091e-19, 6.008e-19, 5.932e-19, 5.857e-19, 5.781e-19,
5383 5.706e-19, 5.638e-19, 5.570e-19, 5.502e-19, 5.442e-19,
5384 5.374e-19, 5.313e-19, 5.253e-19, 5.200e-19, 5.140e-19,
5385 5.087e-19, 5.034e-19, 4.981e-19, 4.936e-19, 4.891e-19,
5386 4.845e-19, 4.800e-19, 4.755e-19, 4.717e-19, 4.679e-19,
5387 4.642e-19, 4.604e-19, 4.566e-19, 4.536e-19, 4.506e-19,
5388 4.475e-19, 4.445e-19, 4.423e-19, 4.400e-19, 4.370e-19,
5389 4.355e-19, 4.332e-19, 4.317e-19, 4.294e-19, 4.287e-19,
5390 4.272e-19, 4.257e-19, 4.249e-19, 4.242e-19, 4.234e-19,
5391 4.234e-19, 4.226e-19, 4.226e-19, 4.226e-19, 4.234e-19,
5392 4.234e-19, 4.242e-19, 4.249e-19, 4.264e-19, 4.272e-19,
5393 4.287e-19, 4.302e-19, 4.325e-19, 4.347e-19, 4.370e-19,
5394 4.392e-19, 4.423e-19, 4.453e-19, 4.483e-19, 4.521e-19,
5395 4.558e-19, 4.596e-19, 4.642e-19, 4.687e-19, 4.732e-19,
5396 4.785e-19, 4.838e-19, 4.898e-19, 4.958e-19, 5.026e-19,
5397 5.094e-19, 5.162e-19, 5.238e-19, 5.313e-19, 5.396e-19,
5398 5.487e-19, 5.577e-19, 5.668e-19, 5.774e-19, 5.872e-19,
5399 5.985e-19, 6.098e-19, 6.219e-19, 6.347e-19, 6.475e-19,
5400 6.611e-19, 6.755e-19, 6.906e-19, 7.064e-19, 7.223e-19,
5401 7.396e-19, 7.547e-19, 7.774e-19, 7.925e-19, 8.151e-19,
5402 8.377e-19, 8.604e-19, 8.830e-19, 9.057e-19, 9.283e-19,
5403 9.585e-19, 9.887e-19, 1.011e-18, 1.042e-18, 1.072e-18,
5404 1.109e-18, 1.140e-18, 1.177e-18, 1.215e-18, 1.253e-18,
5405 1.298e-18, 1.343e-18, 1.389e-18, 1.434e-18, 1.479e-18,
5406 1.532e-18, 1.592e-18, 1.645e-18, 1.706e-18, 1.774e-18,
5407 1.842e-18, 1.909e-18, 1.985e-18, 2.060e-18, 2.143e-18,
5408 2.226e-18, 2.325e-18, 2.423e-18, 2.521e-18, 2.634e-18,
5409 2.747e-18, 2.868e-18, 3.004e-18, 3.132e-18, 3.283e-18,
5410 3.434e-18, 3.600e-18, 3.774e-18, 3.955e-18, 4.151e-18,
5411 4.362e-18, 4.589e-18, 4.823e-18, 5.072e-18, 5.343e-18,
5412 5.638e-18, 5.947e-18, 6.279e-18, 6.634e-18, 7.011e-18,
5413 7.434e-18, 7.925e-18, 8.377e-18, 8.906e-18, 9.434e-18,
5414 1.004e-17, 1.072e-17, 1.147e-17, 1.223e-17, 1.306e-17,
5415 1.404e-17, 1.509e-17, 1.615e-17, 1.736e-17, 1.872e-17,
5416 2.030e-17, 2.204e-17, 2.377e-17, 2.581e-17, 2.815e-17,
5417 3.094e-17, 3.389e-17, 3.706e-17, 4.068e-17, 4.498e-17,
5418 5.042e-17, 5.638e-17, 6.279e-17, 7.019e-17, 7.925e-17,
5419 9.132e-17, 1.049e-16, 1.208e-16, 1.389e-16, 1.592e-16,
5420 1.811e-16, 2.060e-16, 2.340e-16, 2.634e-16, 2.943e-16,
5421 3.260e-16, 3.600e-16, 3.955e-16, 4.309e-16, 1.103e-14,
5422 2.506e-14, 4.104e-14, 5.874e-14, 7.793e-14, 9.821e-14,
5423 1.190e-13, 1.397e-13, 1.596e-13, 1.784e-13, 1.965e-13,
5424 2.147e-13, 2.340e-13, 2.551e-13, 2.783e-13, 3.032e-13,
5425 3.282e-13, 3.517e-13, 3.712e-13, 3.839e-13, 3.902e-13,
5426 3.907e-13, 3.857e-13, 3.758e-13, 3.617e-13, 3.440e-13,
5427 3.234e-13, 3.005e-13, 2.758e-13, 2.500e-13, 2.232e-13,
5428 1.957e-13, 1.672e-13, 1.376e-13, 1.068e-13, 7.534e-14,
5429 4.448e-14, 1.646e-14, 7.117e-16, 6.853e-16, 6.611e-16,
5430 6.423e-16, 6.242e-16, 6.060e-16, 5.925e-16, 5.887e-16,
5431 6.008e-16, 6.279e-16, 6.679e-16, 7.192e-16, 7.849e-16,
5432 8.604e-16, 9.434e-16, 1.237e-14, 2.704e-14, 4.486e-14,
5433 6.621e-14, 9.162e-14, 1.215e-13, 1.567e-13, 1.979e-13,
5434 2.458e-13, 3.012e-13, 3.647e-13, 4.369e-13, 5.184e-13,
5435 6.090e-13, 7.084e-13, 8.155e-13, 9.281e-13, 1.044e-12,
5436 1.160e-12, 1.272e-12, 1.377e-12, 1.480e-12, 1.584e-12,
5437 1.698e-12, 1.828e-12, 1.975e-12, 2.140e-12, 2.312e-12,
5438 2.455e-12, 2.557e-12, 2.620e-12, 2.647e-12, 2.640e-12,
5439 2.602e-12, 2.536e-12, 2.446e-12, 2.334e-12, 2.206e-12,
5440 2.063e-12, 1.911e-12, 1.750e-12, 1.584e-12, 1.413e-12,
5441 1.237e-12, 1.054e-12, 8.642e-13, 6.704e-13, 4.821e-13,
5442 3.093e-13, 1.651e-13, 5.853e-14, 2.657e-15, 2.340e-15,
5443 2.068e-15, 1.849e-15, 1.645e-15, 1.472e-15, 1.321e-15,
5444 1.208e-15, 1.132e-15, 1.094e-15, 1.079e-15, 4.198e-15,
5445 1.473e-14, 2.792e-14, 4.378e-14, 6.256e-14, 8.443e-14,
5446 1.096e-13, 1.382e-13, 1.702e-13, 2.055e-13, 2.437e-13,
5447 2.843e-13, 3.262e-13, 3.682e-13, 4.090e-13, 4.477e-13,
5448 4.847e-13, 5.220e-13, 5.617e-13, 6.059e-13, 6.555e-13,
5449 7.100e-13, 7.681e-13, 8.206e-13, 8.615e-13, 8.884e-13,
5450 9.020e-13, 9.031e-13, 8.928e-13, 8.720e-13, 8.425e-13,
5451 8.051e-13, 7.613e-13, 7.123e-13, 6.594e-13, 6.037e-13,
5452 5.458e-13, 4.862e-13, 4.248e-13, 3.610e-13, 2.945e-13,
5453 2.263e-13, 1.588e-13, 9.623e-14, 4.206e-14, 1.162e-15,
5454 1.064e-15, 9.509e-16, 8.226e-16, 6.913e-16, 5.683e-16,
5455 4.687e-16, 3.955e-16, 3.404e-16, 2.974e-16, 2.619e-16,
5456 2.287e-16, 1.985e-16, 1.758e-16, 1.570e-16, 1.419e-16,
5457 1.268e-16, 1.132e-16, 1.019e-16, 9.283e-17, 8.453e-17,
5458 7.698e-17, 6.966e-17, 6.362e-17, 5.842e-17, 5.381e-17,
5459 4.943e-17, 4.536e-17, 4.189e-17, 3.879e-17, 3.600e-17,
5460 3.336e-17, 3.087e-17, 2.875e-17, 2.679e-17, 2.506e-17,
5461 2.332e-17, 2.181e-17, 2.038e-17, 1.909e-17, 1.796e-17,
5462 1.683e-17, 1.585e-17, 1.487e-17, 1.404e-17, 1.321e-17,
5463 1.245e-17, 1.177e-17, 1.109e-17, 1.049e-17, 9.962e-18,
5464 9.434e-18, 8.906e-18, 8.453e-18, 8.000e-18, 7.623e-18,
5465 7.238e-18, 6.875e-18, 6.543e-18, 6.226e-18, 5.932e-18,
5466 5.653e-18, 5.381e-18, 5.132e-18, 4.898e-18, 4.679e-18,
5467 4.468e-18, 4.272e-18, 4.083e-18, 3.902e-18, 3.736e-18,
5468 3.577e-18, 3.426e-18, 3.283e-18, 3.147e-18, 3.019e-18,
5469 2.891e-18, 2.777e-18, 2.664e-18, 2.558e-18, 2.460e-18,
5470 2.362e-18, 2.272e-18, 2.181e-18, 2.098e-18, 2.023e-18,
5471 1.947e-18, 1.872e-18, 1.804e-18, 1.736e-18, 1.675e-18,
5472 1.615e-18, 1.555e-18, 1.502e-18, 1.449e-18, 1.396e-18,
5473 1.351e-18, 1.298e-18, 1.253e-18, 1.215e-18, 1.170e-18,
5474 1.132e-18, 1.094e-18, 1.057e-18, 1.026e-18, 9.887e-19,
5475 9.585e-19, 9.283e-19, 8.981e-19, 8.679e-19, 8.377e-19,
5476 8.151e-19, 7.849e-19, 7.623e-19, 7.396e-19, 7.162e-19,
5477 6.943e-19, 6.732e-19, 6.528e-19, 6.332e-19, 6.143e-19,
5478 5.955e-19, 5.781e-19, 5.608e-19, 5.442e-19, 5.283e-19,
5479 5.132e-19, 4.981e-19, 4.838e-19, 4.702e-19, 4.566e-19,
5480 4.438e-19, 4.309e-19, 4.189e-19, 4.075e-19, 3.962e-19,
5481 3.849e-19, 3.743e-19, 3.645e-19, 3.547e-19, 3.449e-19,
5482 3.358e-19, 3.268e-19, 3.177e-19, 3.094e-19, 3.011e-19,
5483 2.936e-19, 2.853e-19, 2.785e-19, 2.709e-19, 2.642e-19,
5484 2.574e-19, 2.506e-19, 2.438e-19, 2.377e-19, 2.317e-19,
5485 2.257e-19, 2.204e-19, 2.151e-19, 2.098e-19, 2.045e-19,
5486 1.992e-19, 1.970e-19, 1.970e-19, 1.962e-19, 1.902e-19,
5487 1.887e-19};
5488
5489// CKD_MT 1.00 implementation of N2-N2 model of
5490// Borysow, A, and L. Frommhold,
5491// "Collision-induced rototranslational absorption spectra of N2-N2
5492// pairs for temperatures from 50 to 300 K", The
5493// Astrophysical Journal, 311, 1043-1057, 1986.
5494// absorption coefficient in units of [cm^-1 Amagat^-2]
5495// these data are for T=296K
5496const Numeric N2N2_CT296_ckd_mt_100_v1 = -10.0;
5497const Numeric N2N2_CT296_ckd_mt_100_v2 = 350.0;
5498const Numeric N2N2_CT296_ckd_mt_100_dv = 5.0;
5499const int N2N2_CT296_ckd_mt_100_npt = 73;
5500const double N2N2_CT296_ckd_mt_100[N2N2_CT296_ckd_mt_100_npt+addF77fields] = {
5501 0.0000e0,
5502 0.4303E-06, 0.4850E-06, 0.4979E-06, 0.4850E-06, 0.4303E-06,
5503 0.3715E-06, 0.3292E-06, 0.3086E-06, 0.2920E-06, 0.2813E-06,
5504 0.2804E-06, 0.2738E-06, 0.2726E-06, 0.2724E-06, 0.2635E-06,
5505 0.2621E-06, 0.2547E-06, 0.2428E-06, 0.2371E-06, 0.2228E-06,
5506 0.2100E-06, 0.1991E-06, 0.1822E-06, 0.1697E-06, 0.1555E-06,
5507 0.1398E-06, 0.1281E-06, 0.1138E-06, 0.1012E-06, 0.9078E-07,
5508 0.7879E-07, 0.6944E-07, 0.6084E-07, 0.5207E-07, 0.4540E-07,
5509 0.3897E-07, 0.3313E-07, 0.2852E-07, 0.2413E-07, 0.2045E-07,
5510 0.1737E-07, 0.1458E-07, 0.1231E-07, 0.1031E-07, 0.8586E-08,
5511 0.7162E-08, 0.5963E-08, 0.4999E-08, 0.4226E-08, 0.3607E-08,
5512 0.3090E-08, 0.2669E-08, 0.2325E-08, 0.2024E-08, 0.1783E-08,
5513 0.1574E-08, 0.1387E-08, 0.1236E-08, 0.1098E-08, 0.9777E-09,
5514 0.8765E-09, 0.7833E-09, 0.7022E-09, 0.6317E-09, 0.5650E-09,
5515 0.5100E-09, 0.4572E-09, 0.4115E-09, 0.3721E-09, 0.3339E-09,
5516 0.3005E-09, 0.2715E-09, 0.2428E-09};
5517
5518const double N2N2_sf_296_ckd_mt_100[N2N2_CT296_ckd_mt_100_npt+addF77fields] = {
5519 0.0e0,
5520 1.3534, 1.3517, 1.3508, 1.3517, 1.3534,
5521 1.3558, 1.3584, 1.3607, 1.3623, 1.3632,
5522 1.3634, 1.3632, 1.3627, 1.3620, 1.3612,
5523 1.3605, 1.3597, 1.3590, 1.3585, 1.3582,
5524 1.3579, 1.3577, 1.3577, 1.3580, 1.3586,
5525 1.3594, 1.3604, 1.3617, 1.3633, 1.3653,
5526 1.3677, 1.3706, 1.3742, 1.3780, 1.3822,
5527 1.3868, 1.3923, 1.3989, 1.4062, 1.4138,
5528 1.4216, 1.4298, 1.4388, 1.4491, 1.4604,
5529 1.4718, 1.4829, 1.4930, 1.5028, 1.5138,
5530 1.5265, 1.5392, 1.5499, 1.5577, 1.5639,
5531 1.5714, 1.5816, 1.5920, 1.6003, 1.6051,
5532 1.6072, 1.6097, 1.6157, 1.6157, 1.6157,
5533 1.6157, 1.6157, 1.6157, 1.6157, 1.6157,
5534 1.6157, 1.6157, 1.6157};
5535
5536// CKD_MT 1.00 implementation of N2-N2 model of
5537// Borysow, A, and L. Frommhold,
5538// "Collision-induced rototranslational absorption spectra of N2-N2
5539// pairs for temperatures from 50 to 300 K", The
5540// Astrophysical Journal, 311, 1043-1057, 1986.
5541// absorption coefficient in units of [cm^-1 Amagat^-2]
5542// these data are for T=220K
5543const Numeric N2N2_CT220_ckd_mt_100_v1 = -10.0;
5544const Numeric N2N2_CT220_ckd_mt_100_v2 = 350.0;
5545const Numeric N2N2_CT220_ckd_mt_100_dv = 5.0;
5546const int N2N2_CT220_ckd_mt_100_npt = 73;
5547const double N2N2_CT220_ckd_mt_100[N2N2_CT220_ckd_mt_100_npt+addF77fields] = {
5548 0.0000e0,
5549 0.4946E-06, 0.5756E-06, 0.5964E-06, 0.5756E-06, 0.4946E-06,
5550 0.4145E-06, 0.3641E-06, 0.3482E-06, 0.3340E-06, 0.3252E-06,
5551 0.3299E-06, 0.3206E-06, 0.3184E-06, 0.3167E-06, 0.2994E-06,
5552 0.2943E-06, 0.2794E-06, 0.2582E-06, 0.2468E-06, 0.2237E-06,
5553 0.2038E-06, 0.1873E-06, 0.1641E-06, 0.1474E-06, 0.1297E-06,
5554 0.1114E-06, 0.9813E-07, 0.8309E-07, 0.7059E-07, 0.6068E-07,
5555 0.5008E-07, 0.4221E-07, 0.3537E-07, 0.2885E-07, 0.2407E-07,
5556 0.1977E-07, 0.1605E-07, 0.1313E-07, 0.1057E-07, 0.8482E-08,
5557 0.6844E-08, 0.5595E-08, 0.4616E-08, 0.3854E-08, 0.3257E-08,
5558 0.2757E-08, 0.2372E-08, 0.2039E-08, 0.1767E-08, 0.1548E-08,
5559 0.1346E-08, 0.1181E-08, 0.1043E-08, 0.9110E-09, 0.8103E-09,
5560 0.7189E-09, 0.6314E-09, 0.5635E-09, 0.4976E-09, 0.4401E-09,
5561 0.3926E-09, 0.3477E-09, 0.3085E-09, 0.2745E-09, 0.2416E-09,
5562 0.2155E-09, 0.1895E-09, 0.1678E-09, 0.1493E-09, 0.1310E-09,
5563 0.1154E-09, 0.1019E-09, 0.8855E-10};
5564
5565const double N2N2_sf_220_ckd_mt_100[N2N2_CT220_ckd_mt_100_npt+addF77fields] = {
5566 0.0e0,
5567 1.3536, 1.3515, 1.3502, 1.3515, 1.3536,
5568 1.3565, 1.3592, 1.3612, 1.3623, 1.3626,
5569 1.3623, 1.3616, 1.3609, 1.3600, 1.3591,
5570 1.3583, 1.3576, 1.3571, 1.3571, 1.3572,
5571 1.3574, 1.3578, 1.3585, 1.3597, 1.3616,
5572 1.3640, 1.3666, 1.3698, 1.3734, 1.3776,
5573 1.3828, 1.3894, 1.3969, 1.4049, 1.4127,
5574 1.4204, 1.4302, 1.4427, 1.4562, 1.4687,
5575 1.4798, 1.4894, 1.5000, 1.5142, 1.5299,
5576 1.5441, 1.5555, 1.5615, 1.5645, 1.5730,
5577 1.5880, 1.6028, 1.6121, 1.6133, 1.6094,
5578 1.6117, 1.6244, 1.6389, 1.6485, 1.6513,
5579 1.6468, 1.6438, 1.6523, 1.6523, 1.6523,
5580 1.6523, 1.6523, 1.6523, 1.6523, 1.6523,
5581 1.6523, 1.6523, 1.6523};
5582
5583// CKD_MT 1.00 implementation of N2-N2 model of
5584// Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
5585// Infrared collision-induced absorption by N2 near 4.3 microns for
5586// atmospheric applications: measurements and emprirical modeling,
5587// Appl. Optics, 35, 5911-5917, (1996).
5588const Numeric N2N2_N2F_ckd_mt_100_v1 = 2085.000;
5589const Numeric N2N2_N2F_ckd_mt_100_v2 = 2670.000;
5590const Numeric N2N2_N2F_ckd_mt_100_dv = 5.000;
5591const int N2N2_N2F_ckd_mt_100_npt = 118;
5592const double N2N2_N2F_ckd_mt_100[N2N2_N2F_ckd_mt_100_npt+addF77fields] = {
5593 0.000E+00,
5594 0.000E+00, 2.000E-10, 5.200E-09, 1.020E-08, 1.520E-08,
5595 2.020E-08, 2.520E-08, 3.020E-08, 4.450E-08, 5.220E-08,
5596 6.460E-08, 7.750E-08, 9.030E-08, 1.060E-07, 1.210E-07,
5597 1.370E-07, 1.570E-07, 1.750E-07, 2.010E-07, 2.300E-07,
5598 2.590E-07, 2.950E-07, 3.260E-07, 3.660E-07, 4.050E-07,
5599 4.470E-07, 4.920E-07, 5.340E-07, 5.840E-07, 6.240E-07,
5600 6.670E-07, 7.140E-07, 7.260E-07, 7.540E-07, 7.840E-07,
5601 8.090E-07, 8.420E-07, 8.620E-07, 8.870E-07, 9.110E-07,
5602 9.360E-07, 9.760E-07, 1.030E-06, 1.110E-06, 1.230E-06,
5603 1.390E-06, 1.610E-06, 1.760E-06, 1.940E-06, 1.970E-06,
5604 1.870E-06, 1.750E-06, 1.560E-06, 1.420E-06, 1.350E-06,
5605 1.320E-06, 1.290E-06, 1.290E-06, 1.290E-06, 1.300E-06,
5606 1.320E-06, 1.330E-06, 1.340E-06, 1.350E-06, 1.330E-06,
5607 1.310E-06, 1.290E-06, 1.240E-06, 1.200E-06, 1.160E-06,
5608 1.100E-06, 1.040E-06, 9.960E-07, 9.380E-07, 8.630E-07,
5609 7.980E-07, 7.260E-07, 6.550E-07, 5.940E-07, 5.350E-07,
5610 4.740E-07, 4.240E-07, 3.770E-07, 3.330E-07, 2.960E-07,
5611 2.630E-07, 2.340E-07, 2.080E-07, 1.850E-07, 1.670E-07,
5612 1.470E-07, 1.320E-07, 1.200E-07, 1.090E-07, 9.850E-08,
5613 9.080E-08, 8.180E-08, 7.560E-08, 6.850E-08, 6.140E-08,
5614 5.830E-08, 5.770E-08, 5.000E-08, 4.320E-08, 3.140E-08,
5615 2.890E-08, 2.640E-08, 2.390E-08, 2.140E-08, 1.890E-08,
5616 1.640E-08, 1.390E-08, 1.140E-08, 8.900E-09, 6.400E-09,
5617 3.900E-09, 1.400E-09, 0.000E+00};
5618
5619// temperature coefficients:
5620const double N2N2_N2Ft_ckd_mt_100[N2N2_N2F_ckd_mt_100_npt+addF77fields] = {
5621 0.000E+00,
5622 1.040E+03, 1.010E+03, 9.800E+02, 9.500E+02, 9.200E+02,
5623 8.900E+02, 8.600E+02, 8.300E+02, 8.020E+02, 7.610E+02,
5624 7.220E+02, 6.790E+02, 6.460E+02, 6.090E+02, 5.620E+02,
5625 5.110E+02, 4.720E+02, 4.360E+02, 4.060E+02, 3.770E+02,
5626 3.550E+02, 3.380E+02, 3.190E+02, 2.990E+02, 2.780E+02,
5627 2.550E+02, 2.330E+02, 2.080E+02, 1.840E+02, 1.490E+02,
5628 1.070E+02, 6.600E+01, 2.500E+01, -1.300E+01, -4.900E+01,
5629 -8.200E+01, -1.040E+02, -1.190E+02, -1.300E+02, -1.390E+02,
5630 -1.440E+02, -1.460E+02, -1.460E+02, -1.470E+02, -1.480E+02,
5631 -1.500E+02, -1.530E+02, -1.600E+02, -1.690E+02, -1.810E+02,
5632 -1.890E+02, -1.950E+02, -2.000E+02, -2.050E+02, -2.090E+02,
5633 -2.110E+02, -2.100E+02, -2.100E+02, -2.090E+02, -2.050E+02,
5634 -1.990E+02, -1.900E+02, -1.800E+02, -1.680E+02, -1.570E+02,
5635 -1.430E+02, -1.260E+02, -1.080E+02, -8.900E+01, -6.300E+01,
5636 -3.200E+01, 1.000E+00, 3.500E+01, 6.500E+01, 9.500E+01,
5637 1.210E+02, 1.410E+02, 1.520E+02, 1.610E+02, 1.640E+02,
5638 1.640E+02, 1.610E+02, 1.550E+02, 1.480E+02, 1.430E+02,
5639 1.370E+02, 1.330E+02, 1.310E+02, 1.330E+02, 1.390E+02,
5640 1.500E+02, 1.650E+02, 1.870E+02, 2.130E+02, 2.480E+02,
5641 2.840E+02, 3.210E+02, 3.720E+02, 4.490E+02, 5.140E+02,
5642 5.690E+02, 6.090E+02, 6.420E+02, 6.730E+02, 7.000E+02,
5643 7.300E+02, 7.600E+02, 7.900E+02, 8.200E+02, 8.500E+02,
5644 8.800E+02, 9.100E+02, 9.400E+02, 9.700E+02, 1.000E+03,
5645 1.030E+03, 1.060E+03, 1.090E+03};
5646
5647// CKD_MT 2.50 implementation of N2-N2 model of
5648// Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
5649// Infrared collision-induced absorption by N2 near 4.3 microns for
5650// atmospheric applications: measurements and emprirical modeling,
5651// Appl. Optics, 35, 5911-5917, (1996).
5652const Numeric N2N2_N2F_ckd_mt_250_v1 = 2001.766357;
5653const Numeric N2N2_N2F_ckd_mt_250_v2 = 2710.45;
5654const Numeric N2N2_N2F_ckd_mt_250_dv = 3.981461525;
5655const int N2N2_N2F_ckd_mt_250_npt = 179;
5656const double N2N2_N2F_ckd_mt_250[N2N2_N2F_ckd_mt_250_npt+addF77fields] = {
5657 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
5658 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
5659 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 9.280E-11,
5660 3.660E-10, 8.130E-10, 1.430E-09, 2.230E-09, 3.210E-09,
5661 4.370E-09, 5.750E-09, 7.340E-09, 9.190E-09, 1.130E-08,
5662 1.370E-08, 1.650E-08, 1.960E-08, 2.310E-08, 2.710E-08,
5663 3.160E-08, 3.660E-08, 4.230E-08, 4.860E-08, 5.570E-08,
5664 6.350E-08, 7.230E-08, 8.200E-08, 9.270E-08, 1.050E-07,
5665 1.180E-07, 1.320E-07, 1.480E-07, 1.650E-07, 1.840E-07,
5666 2.040E-07, 2.270E-07, 2.510E-07, 2.770E-07, 3.060E-07,
5667 3.360E-07, 3.670E-07, 4.010E-07, 4.330E-07, 4.710E-07,
5668 5.050E-07, 5.450E-07, 5.790E-07, 6.200E-07, 6.540E-07,
5669 6.940E-07, 7.240E-07, 7.610E-07, 7.880E-07, 8.220E-07,
5670 8.440E-07, 8.720E-07, 8.930E-07, 9.190E-07, 9.370E-07,
5671 9.620E-07, 9.870E-07, 1.020E-06, 1.060E-06, 1.110E-06,
5672 1.180E-06, 1.280E-06, 1.400E-06, 1.570E-06, 1.750E-06,
5673 1.880E-06, 2.020E-06, 2.080E-06, 2.060E-06, 1.960E-06,
5674 1.860E-06, 1.710E-06, 1.570E-06, 1.490E-06, 1.440E-06,
5675 1.410E-06, 1.390E-06, 1.380E-06, 1.380E-06, 1.390E-06,
5676 1.390E-06, 1.410E-06, 1.420E-06, 1.430E-06, 1.420E-06,
5677 1.430E-06, 1.410E-06, 1.400E-06, 1.370E-06, 1.350E-06,
5678 1.310E-06, 1.270E-06, 1.220E-06, 1.170E-06, 1.120E-06,
5679 1.060E-06, 1.010E-06, 9.470E-07, 8.910E-07, 8.290E-07,
5680 7.740E-07, 7.160E-07, 6.620E-07, 6.090E-07, 5.600E-07,
5681 5.130E-07, 4.680E-07, 4.290E-07, 3.900E-07, 3.560E-07,
5682 3.240E-07, 2.950E-07, 2.680E-07, 2.440E-07, 2.230E-07,
5683 2.030E-07, 1.850E-07, 1.690E-07, 1.540E-07, 1.410E-07,
5684 1.290E-07, 1.180E-07, 1.080E-07, 9.950E-08, 9.100E-08,
5685 8.380E-08, 7.700E-08, 7.100E-08, 6.510E-08, 6.010E-08,
5686 5.550E-08, 5.110E-08, 4.710E-08, 4.340E-08, 3.980E-08,
5687 3.660E-08, 3.380E-08, 3.110E-08, 2.840E-08, 2.610E-08,
5688 2.390E-08, 2.210E-08, 2.010E-08, 1.830E-08, 1.710E-08,
5689 1.550E-08, 1.450E-08, 1.320E-08, 1.250E-08, 1.140E-08,
5690 1.070E-08, 1.000E-08, 8.100E-09, 6.400E-09, 4.900E-09,
5691 3.600E-09, 2.500E-09, 1.600E-09, 9.000E-10, 4.000E-10,
5692 1.000E-10, 0.000E+00, 0.000E+00, 0.000E+00};
5693
5694// temperature coefficients:
5695const double N2N2_N2Ft_ckd_mt_250[N2N2_N2F_ckd_mt_250_npt+addF77fields] = {
5696 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
5697 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00,
5698 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00, 1.880E-10,
5699 7.160E-10, 1.530E-09, 2.580E-09, 3.840E-09, 5.270E-09,
5700 6.850E-09, 8.550E-09, 1.040E-08, 1.230E-08, 1.440E-08,
5701 1.650E-08, 1.880E-08, 2.130E-08, 2.400E-08, 2.690E-08,
5702 3.010E-08, 3.360E-08, 3.750E-08, 4.180E-08, 4.670E-08,
5703 5.210E-08, 5.830E-08, 6.520E-08, 7.290E-08, 8.170E-08,
5704 9.150E-08, 1.030E-07, 1.150E-07, 1.290E-07, 1.440E-07,
5705 1.610E-07, 1.800E-07, 2.020E-07, 2.250E-07, 2.510E-07,
5706 2.790E-07, 3.090E-07, 3.430E-07, 3.770E-07, 4.160E-07,
5707 4.540E-07, 4.990E-07, 5.370E-07, 5.850E-07, 6.250E-07,
5708 6.750E-07, 7.130E-07, 7.610E-07, 7.970E-07, 8.410E-07,
5709 8.720E-07, 9.100E-07, 9.380E-07, 9.720E-07, 9.940E-07,
5710 1.020E-06, 1.050E-06, 1.080E-06, 1.120E-06, 1.170E-06,
5711 1.240E-06, 1.340E-06, 1.470E-06, 1.660E-06, 1.870E-06,
5712 2.040E-06, 2.220E-06, 2.300E-06, 2.290E-06, 2.160E-06,
5713 2.050E-06, 1.870E-06, 1.710E-06, 1.620E-06, 1.580E-06,
5714 1.550E-06, 1.540E-06, 1.540E-06, 1.550E-06, 1.560E-06,
5715 1.570E-06, 1.590E-06, 1.590E-06, 1.600E-06, 1.580E-06,
5716 1.570E-06, 1.540E-06, 1.510E-06, 1.470E-06, 1.430E-06,
5717 1.370E-06, 1.310E-06, 1.250E-06, 1.180E-06, 1.110E-06,
5718 1.040E-06, 9.740E-07, 9.020E-07, 8.360E-07, 7.650E-07,
5719 7.050E-07, 6.430E-07, 5.860E-07, 5.320E-07, 4.820E-07,
5720 4.370E-07, 3.950E-07, 3.570E-07, 3.220E-07, 2.910E-07,
5721 2.630E-07, 2.390E-07, 2.160E-07, 1.960E-07, 1.780E-07,
5722 1.620E-07, 1.480E-07, 1.330E-07, 1.220E-07, 1.120E-07,
5723 1.020E-07, 9.280E-08, 8.420E-08, 7.700E-08, 6.990E-08,
5724 6.390E-08, 5.880E-08, 5.380E-08, 4.840E-08, 4.380E-08,
5725 4.020E-08, 3.690E-08, 3.290E-08, 3.050E-08, 2.720E-08,
5726 2.490E-08, 2.260E-08, 2.020E-08, 1.810E-08, 1.620E-08,
5727 1.500E-08, 1.310E-08, 1.100E-08, 1.020E-08, 8.730E-09,
5728 8.190E-09, 6.630E-09, 5.960E-09, 5.110E-09, 4.500E-09,
5729 3.810E-09, 2.680E-09, 3.050E-09, 2.480E-09, 1.370E-09,
5730 1.550E-09, 4.690E-10, 5.120E-10, 0.000E+00, 0.000E+00,
5731 0.000E+00, 0.000E+00, 0.000E+00, 0.000E+00};
5732
5733
5734// CKD_MT 1.00 implementation of oxygen collision induced fundamental model of
5735// F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
5736// J.-M. Hartmann, Ch. Boulet,
5737// "Infrared collision-induced absorption by O2 near 6.4 microns for
5738// atmospheric applications: measurements and emprirical modeling",
5739// Appl. Optics, 35, 5911-5917, (1996).
5740const Numeric O2O2_O2F_ckd_mt_100_v1 = 1340.000;
5741const Numeric O2O2_O2F_ckd_mt_100_v2 = 1850.000;
5742const Numeric O2O2_O2F_ckd_mt_100_dv = 5.000;
5743const int O2O2_O2F_ckd_mt_100_npt = 103;
5744const double O2O2_O2Fo_ckd_mt_100[O2O2_O2F_ckd_mt_100_npt+addF77fields] = {
5745 0.000E+00,
5746 0.000E+00, 9.744E-09, 2.256E-08, 3.538E-08, 4.820E-08,
5747 6.100E-08, 7.400E-08, 8.400E-08, 9.600E-08, 1.200E-07,
5748 1.620E-07, 2.080E-07, 2.460E-07, 2.850E-07, 3.140E-07,
5749 3.800E-07, 4.440E-07, 5.000E-07, 5.710E-07, 6.730E-07,
5750 7.680E-07, 8.530E-07, 9.660E-07, 1.100E-06, 1.210E-06,
5751 1.330E-06, 1.470E-06, 1.590E-06, 1.690E-06, 1.800E-06,
5752 1.920E-06, 2.040E-06, 2.150E-06, 2.260E-06, 2.370E-06,
5753 2.510E-06, 2.670E-06, 2.850E-06, 3.070E-06, 3.420E-06,
5754 3.830E-06, 4.200E-06, 4.450E-06, 4.600E-06, 4.530E-06,
5755 4.280E-06, 3.960E-06, 3.680E-06, 3.480E-06, 3.350E-06,
5756 3.290E-06, 3.250E-06, 3.230E-06, 3.230E-06, 3.210E-06,
5757 3.190E-06, 3.110E-06, 3.030E-06, 2.910E-06, 2.800E-06,
5758 2.650E-06, 2.510E-06, 2.320E-06, 2.130E-06, 1.930E-06,
5759 1.760E-06, 1.590E-06, 1.420E-06, 1.250E-06, 1.110E-06,
5760 9.900E-07, 8.880E-07, 7.910E-07, 6.780E-07, 5.870E-07,
5761 5.240E-07, 4.640E-07, 4.030E-07, 3.570E-07, 3.200E-07,
5762 2.900E-07, 2.670E-07, 2.420E-07, 2.150E-07, 1.820E-07,
5763 1.600E-07, 1.460E-07, 1.280E-07, 1.030E-07, 8.700E-08,
5764 8.100E-08, 7.100E-08, 6.400E-08, 5.807E-08, 5.139E-08,
5765 4.496E-08, 3.854E-08, 3.212E-08, 2.569E-08, 1.927E-08,
5766 1.285E-08, 6.423E-09, 0.000E+00};
5767
5768const double O2O2_O2Ft_ckd_mt_100[O2O2_O2F_ckd_mt_100_npt+addF77fields] = {
5769 0.000E+00,
5770 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02,
5771 4.670E+02, 4.000E+02, 3.150E+02, 3.790E+02, 3.680E+02,
5772 4.750E+02, 5.210E+02, 5.310E+02, 5.120E+02, 4.420E+02,
5773 4.440E+02, 4.300E+02, 3.810E+02, 3.350E+02, 3.240E+02,
5774 2.960E+02, 2.480E+02, 2.150E+02, 1.930E+02, 1.580E+02,
5775 1.270E+02, 1.010E+02, 7.100E+01, 3.100E+01, -6.000E+00,
5776 -2.600E+01, -4.700E+01, -6.300E+01, -7.900E+01, -8.800E+01,
5777 -8.800E+01, -8.700E+01, -9.000E+01, -9.800E+01, -9.900E+01,
5778 -1.090E+02, -1.340E+02, -1.600E+02, -1.670E+02, -1.640E+02,
5779 -1.580E+02, -1.530E+02, -1.510E+02, -1.560E+02, -1.660E+02,
5780 -1.680E+02, -1.730E+02, -1.700E+02, -1.610E+02, -1.450E+02,
5781 -1.260E+02, -1.080E+02, -8.400E+01, -5.900E+01, -2.900E+01,
5782 4.000E+00, 4.100E+01, 7.300E+01, 9.700E+01, 1.230E+02,
5783 1.590E+02, 1.980E+02, 2.200E+02, 2.420E+02, 2.560E+02,
5784 2.810E+02, 3.110E+02, 3.340E+02, 3.190E+02, 3.130E+02,
5785 3.210E+02, 3.230E+02, 3.100E+02, 3.150E+02, 3.200E+02,
5786 3.350E+02, 3.610E+02, 3.780E+02, 3.730E+02, 3.380E+02,
5787 3.190E+02, 3.460E+02, 3.220E+02, 2.910E+02, 2.900E+02,
5788 3.500E+02, 3.710E+02, 5.040E+02, 4.000E+02, 4.000E+02,
5789 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02, 4.000E+02,
5790 4.000E+02, 4.000E+02, 4.000E+02};
5791
5792
5793
5794// CKD_MT 1.00 implementation of oxygen v0<-v0 band model of
5795// Mate et al. over the spectral region 7550-8486 cm-1:
5796// B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
5797// "Absolute Intensities for the O2 1.27 micron
5798// continuum absorption",
5799// J. Geophys. Res., 104, 30,585-30,590, 1999.
5800//
5801// The units of these continua coefficients are 1 / (amagat_O2*amagat_air)
5802//
5803// Also, refer to the paper "Observed Atmospheric
5804// Collision Induced Absorption in Near Infrared Oxygen Bands",
5805// Mlawer, Clough, Brown, Stephen, Landry, Goldman, & Murcray,
5806// Journal of Geophysical Research (1998).
5807//
5808// (comment: v0<--v0 band around 7536 to 8500 cm-1 (1.27mu))
5809const Numeric O2_00_ckd_mt_100_v1 = 7536.000e0;
5810const Numeric O2_00_ckd_mt_100_v2 = 8500.000e0;
5811const Numeric O2_00_ckd_mt_100_dv = 2.000e0;
5812const int O2_00_ckd_mt_100_npt = 483;
5813const double O2_00_ckd_mt_100[O2_00_ckd_mt_100_npt+addF77fields] = {
5814 0.000E+00,
5815 0.000E+00, 4.355E-11, 8.709E-11, 1.742E-10, 3.484E-10,
5816 6.968E-10, 1.394E-09, 2.787E-09, 3.561E-09, 3.314E-09,
5817 3.368E-09, 3.435E-09, 2.855E-09, 3.244E-09, 3.447E-09,
5818 3.891E-09, 4.355E-09, 3.709E-09, 4.265E-09, 4.772E-09,
5819 4.541E-09, 4.557E-09, 4.915E-09, 4.688E-09, 5.282E-09,
5820 5.755E-09, 5.096E-09, 5.027E-09, 4.860E-09, 4.724E-09,
5821 5.048E-09, 5.248E-09, 5.473E-09, 4.852E-09, 5.362E-09,
5822 6.157E-09, 6.150E-09, 6.347E-09, 6.388E-09, 6.213E-09,
5823 6.521E-09, 8.470E-09, 8.236E-09, 8.269E-09, 8.776E-09,
5824 9.122E-09, 9.189E-09, 9.778E-09, 8.433E-09, 9.964E-09,
5825 9.827E-09, 1.064E-08, 1.063E-08, 1.031E-08, 1.098E-08,
5826 1.156E-08, 1.295E-08, 1.326E-08, 1.467E-08, 1.427E-08,
5827 1.452E-08, 1.456E-08, 1.554E-08, 1.605E-08, 1.659E-08,
5828 1.754E-08, 1.757E-08, 1.876E-08, 1.903E-08, 1.876E-08,
5829 1.869E-08, 2.036E-08, 2.203E-08, 2.221E-08, 2.284E-08,
5830 2.288E-08, 2.394E-08, 2.509E-08, 2.663E-08, 2.720E-08,
5831 2.839E-08, 2.923E-08, 2.893E-08, 2.949E-08, 2.962E-08,
5832 3.057E-08, 3.056E-08, 3.364E-08, 3.563E-08, 3.743E-08,
5833 3.813E-08, 3.946E-08, 4.082E-08, 4.201E-08, 4.297E-08,
5834 4.528E-08, 4.587E-08, 4.704E-08, 4.962E-08, 5.115E-08,
5835 5.341E-08, 5.365E-08, 5.557E-08, 5.891E-08, 6.084E-08,
5836 6.270E-08, 6.448E-08, 6.622E-08, 6.939E-08, 7.233E-08,
5837 7.498E-08, 7.749E-08, 8.027E-08, 8.387E-08, 8.605E-08,
5838 8.888E-08, 9.277E-08, 9.523E-08, 9.880E-08, 1.037E-07,
5839 1.076E-07, 1.114E-07, 1.151E-07, 1.203E-07, 1.246E-07,
5840 1.285E-07, 1.345E-07, 1.408E-07, 1.465E-07, 1.519E-07,
5841 1.578E-07, 1.628E-07, 1.685E-07, 1.760E-07, 1.847E-07,
5842 1.929E-07, 2.002E-07, 2.070E-07, 2.177E-07, 2.262E-07,
5843 2.365E-07, 2.482E-07, 2.587E-07, 2.655E-07, 2.789E-07,
5844 2.925E-07, 3.023E-07, 3.153E-07, 3.296E-07, 3.409E-07,
5845 3.532E-07, 3.680E-07, 3.859E-07, 3.951E-07, 4.074E-07,
5846 4.210E-07, 4.381E-07, 4.588E-07, 4.792E-07, 4.958E-07,
5847 5.104E-07, 5.271E-07, 5.501E-07, 5.674E-07, 5.913E-07,
5848 6.243E-07, 6.471E-07, 6.622E-07, 6.831E-07, 6.987E-07,
5849 7.159E-07, 7.412E-07, 7.698E-07, 7.599E-07, 7.600E-07,
5850 7.918E-07, 8.026E-07, 8.051E-07, 8.049E-07, 7.914E-07,
5851 7.968E-07, 7.945E-07, 7.861E-07, 7.864E-07, 7.741E-07,
5852 7.675E-07, 7.592E-07, 7.400E-07, 7.362E-07, 7.285E-07,
5853 7.173E-07, 6.966E-07, 6.744E-07, 6.597E-07, 6.413E-07,
5854 6.265E-07, 6.110E-07, 5.929E-07, 5.717E-07, 5.592E-07,
5855 5.411E-07, 5.235E-07, 5.061E-07, 4.845E-07, 4.732E-07,
5856 4.593E-07, 4.467E-07, 4.328E-07, 4.161E-07, 4.035E-07,
5857 3.922E-07, 3.820E-07, 3.707E-07, 3.585E-07, 3.475E-07,
5858 3.407E-07, 3.317E-07, 3.226E-07, 3.134E-07, 3.016E-07,
5859 2.969E-07, 2.894E-07, 2.814E-07, 2.749E-07, 2.657E-07,
5860 2.610E-07, 2.536E-07, 2.467E-07, 2.394E-07, 2.337E-07,
5861 2.302E-07, 2.241E-07, 2.191E-07, 2.140E-07, 2.093E-07,
5862 2.052E-07, 1.998E-07, 1.963E-07, 1.920E-07, 1.862E-07,
5863 1.834E-07, 1.795E-07, 1.745E-07, 1.723E-07, 1.686E-07,
5864 1.658E-07, 1.629E-07, 1.595E-07, 1.558E-07, 1.523E-07,
5865 1.498E-07, 1.466E-07, 1.452E-07, 1.431E-07, 1.408E-07,
5866 1.381E-07, 1.362E-07, 1.320E-07, 1.298E-07, 1.262E-07,
5867 1.247E-07, 1.234E-07, 1.221E-07, 1.197E-07, 1.176E-07,
5868 1.142E-07, 1.121E-07, 1.099E-07, 1.081E-07, 1.073E-07,
5869 1.061E-07, 1.041E-07, 1.019E-07, 9.969E-08, 9.727E-08,
5870 9.642E-08, 9.487E-08, 9.318E-08, 9.116E-08, 9.046E-08,
5871 8.827E-08, 8.689E-08, 8.433E-08, 8.324E-08, 8.204E-08,
5872 8.036E-08, 7.951E-08, 7.804E-08, 7.524E-08, 7.392E-08,
5873 7.227E-08, 7.176E-08, 6.975E-08, 6.914E-08, 6.859E-08,
5874 6.664E-08, 6.506E-08, 6.368E-08, 6.262E-08, 6.026E-08,
5875 6.002E-08, 5.866E-08, 5.867E-08, 5.641E-08, 5.589E-08,
5876 5.499E-08, 5.309E-08, 5.188E-08, 5.139E-08, 4.991E-08,
5877 4.951E-08, 4.833E-08, 4.640E-08, 4.524E-08, 4.479E-08,
5878 4.304E-08, 4.228E-08, 4.251E-08, 4.130E-08, 3.984E-08,
5879 3.894E-08, 3.815E-08, 3.732E-08, 3.664E-08, 3.512E-08,
5880 3.463E-08, 3.503E-08, 3.218E-08, 3.253E-08, 3.107E-08,
5881 2.964E-08, 2.920E-08, 2.888E-08, 2.981E-08, 2.830E-08,
5882 2.750E-08, 2.580E-08, 2.528E-08, 2.444E-08, 2.378E-08,
5883 2.413E-08, 2.234E-08, 2.316E-08, 2.199E-08, 2.088E-08,
5884 1.998E-08, 1.920E-08, 1.942E-08, 1.859E-08, 1.954E-08,
5885 1.955E-08, 1.749E-08, 1.720E-08, 1.702E-08, 1.521E-08,
5886 1.589E-08, 1.469E-08, 1.471E-08, 1.543E-08, 1.433E-08,
5887 1.298E-08, 1.274E-08, 1.226E-08, 1.204E-08, 1.201E-08,
5888 1.298E-08, 1.220E-08, 1.220E-08, 1.096E-08, 1.080E-08,
5889 9.868E-09, 9.701E-09, 1.130E-08, 9.874E-09, 9.754E-09,
5890 9.651E-09, 9.725E-09, 8.413E-09, 7.705E-09, 7.846E-09,
5891 8.037E-09, 9.163E-09, 8.098E-09, 8.160E-09, 7.511E-09,
5892 7.011E-09, 6.281E-09, 6.502E-09, 7.323E-09, 7.569E-09,
5893 5.941E-09, 5.867E-09, 5.676E-09, 4.840E-09, 5.063E-09,
5894 5.207E-09, 4.917E-09, 5.033E-09, 5.356E-09, 3.795E-09,
5895 4.983E-09, 4.600E-09, 3.635E-09, 3.099E-09, 2.502E-09,
5896 3.823E-09, 3.464E-09, 4.332E-09, 3.612E-09, 3.682E-09,
5897 3.709E-09, 3.043E-09, 3.593E-09, 3.995E-09, 4.460E-09,
5898 3.583E-09, 3.290E-09, 3.132E-09, 2.812E-09, 3.109E-09,
5899 3.874E-09, 3.802E-09, 4.024E-09, 3.901E-09, 2.370E-09,
5900 1.821E-09, 2.519E-09, 4.701E-09, 3.855E-09, 4.685E-09,
5901 5.170E-09, 4.387E-09, 4.148E-09, 4.043E-09, 3.545E-09,
5902 3.392E-09, 3.609E-09, 4.635E-09, 3.467E-09, 2.558E-09,
5903 3.389E-09, 2.672E-09, 2.468E-09, 1.989E-09, 2.816E-09,
5904 4.023E-09, 2.664E-09, 2.219E-09, 3.169E-09, 1.654E-09,
5905 3.189E-09, 2.535E-09, 2.618E-09, 3.265E-09, 2.138E-09,
5906 1.822E-09, 2.920E-09, 2.002E-09, 1.300E-09, 3.764E-09,
5907 3.212E-09, 3.222E-09, 2.961E-09, 2.108E-09, 1.708E-09,
5908 2.636E-09, 2.937E-09, 2.939E-09, 2.732E-09, 2.218E-09,
5909 1.046E-09, 6.419E-10, 1.842E-09, 1.112E-09, 1.265E-09,
5910 4.087E-09, 2.044E-09, 1.022E-09, 5.109E-10, 2.554E-10,
5911 1.277E-10, 6.386E-11, 0.000E+00};
5912
5913// CKD_MT 1.00 implementation of oxygen v0<-v0 band model of
5914// Mate et al. over the spectral region 7550-8486 cm-1:
5915// B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
5916// "Absolute Intensities for the O2 1.27 micron
5917// continuum absorption",
5918// J. Geophys. Res., 104, 30,585-30,590, 1999.
5919//
5920// The units of these continua coefficients are 1 / (amagat_O2*amagat_air)
5921//
5922// Also, refer to the paper "Observed Atmospheric
5923// Collision Induced Absorption in Near Infrared Oxygen Bands",
5924// Mlawer, Clough, Brown, Stephen, Landry, Goldman, & Murcray,
5925// Journal of Geophysical Research (1998).
5926//
5927// (comment: v1<--v0 band around 9100 to 11000 cm-1 (1mu))
5928const Numeric O2_10_ckd_mt_100_v1 = 9100.000e0;
5929const Numeric O2_10_ckd_mt_100_v2 = 11000.000e0;
5930const Numeric O2_10_ckd_mt_100_dv = 2.000e0;
5931
5932const Numeric O2_vis_ckd_mt_250_v1 = 15000.000e0;
5933const Numeric O2_vis_ckd_mt_250_v2 = 29870.000e0;
5934const Numeric O2_vis_ckd_mt_250_dv = 10.000e0;
5935const int O2_vis_ckd_mt_250_npt = 1488;
5936const double O2_vis_ckd_mt_250[O2_vis_ckd_mt_250_npt+addF77fields] = {
5937 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5938 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5939 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
5940 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5941 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 0.00E+00,
5942 0.00E+00, 0.00E+00, 6.06E-04, 1.00E-03, 1.00E-03,
5943 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
5944 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
5945 2.49E-03, 3.00E-03, 3.00E-03, 3.00E-03, 4.00E-03,
5946 4.00E-03, 5.00E-03, 5.00E-03, 6.00E-03, 7.00E-03,
5947 8.00E-03, 9.00E-03, 1.00E-02, 1.10E-02, 1.25E-02,
5948 1.46E-02, 1.60E-02, 1.80E-02, 2.00E-02, 2.23E-02,
5949 2.50E-02, 2.69E-02, 3.00E-02, 3.30E-02, 3.63E-02,
5950 4.01E-02, 4.42E-02, 4.67E-02, 5.14E-02, 5.55E-02,
5951 5.96E-02, 6.43E-02, 6.94E-02, 7.37E-02, 7.88E-02,
5952 8.38E-02, 8.86E-02, 9.37E-02, 9.89E-02, 1.03E-01,
5953 1.07E-01, 1.10E-01, 1.14E-01, 1.16E-01, 1.18E-01,
5954 1.19E-01, 1.20E-01, 1.21E-01, 1.20E-01, 1.20E-01,
5955 1.19E-01, 1.17E-01, 1.16E-01, 1.13E-01, 1.10E-01,
5956 1.07E-01, 1.03E-01, 9.97E-02, 9.58E-02, 9.15E-02,
5957 8.80E-02, 8.41E-02, 7.94E-02, 7.53E-02, 7.17E-02,
5958 6.83E-02, 6.43E-02, 6.08E-02, 5.69E-02, 5.31E-02,
5959 5.02E-02, 4.77E-02, 4.40E-02, 4.23E-02, 3.94E-02,
5960 3.70E-02, 3.51E-02, 3.30E-02, 3.10E-02, 2.90E-02,
5961 2.79E-02, 2.60E-02, 2.50E-02, 2.32E-02, 2.20E-02,
5962 2.10E-02, 2.00E-02, 1.90E-02, 1.80E-02, 1.70E-02,
5963 1.65E-02, 1.50E-02, 1.40E-02, 1.30E-02, 1.30E-02,
5964 1.20E-02, 1.10E-02, 1.10E-02, 1.00E-02, 1.00E-02,
5965 9.00E-03, 9.00E-03, 9.00E-03, 8.00E-03, 8.00E-03,
5966 7.01E-03, 7.00E-03, 7.00E-03, 6.98E-03, 6.00E-03,
5967 5.80E-03, 5.00E-03, 5.00E-03, 5.00E-03, 4.00E-03,
5968 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
5969 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 3.00E-03,
5970 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5971 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5972 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5973 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
5974 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 5.00E-03,
5975 5.00E-03, 6.00E-03, 6.00E-03, 7.00E-03, 7.41E-03,
5976 8.15E-03, 9.00E-03, 1.01E-02, 1.10E-02, 1.20E-02,
5977 1.40E-02, 1.50E-02, 1.70E-02, 1.85E-02, 1.97E-02,
5978 2.24E-02, 2.47E-02, 2.74E-02, 3.06E-02, 3.36E-02,
5979 3.70E-02, 4.05E-02, 4.49E-02, 4.93E-02, 5.47E-02,
5980 6.01E-02, 6.52E-02, 7.23E-02, 7.89E-02, 8.80E-02,
5981 9.61E-02, 1.05E-01, 1.17E-01, 1.26E-01, 1.39E-01,
5982 1.49E-01, 1.60E-01, 1.68E-01, 1.74E-01, 1.79E-01,
5983 1.82E-01, 1.84E-01, 1.85E-01, 1.84E-01, 1.83E-01,
5984 1.81E-01, 1.80E-01, 1.77E-01, 1.74E-01, 1.71E-01,
5985 1.68E-01, 1.64E-01, 1.60E-01, 1.55E-01, 1.51E-01,
5986 1.46E-01, 1.40E-01, 1.36E-01, 1.30E-01, 1.25E-01,
5987 1.20E-01, 1.14E-01, 1.09E-01, 1.05E-01, 9.93E-02,
5988 9.30E-02, 8.88E-02, 8.38E-02, 7.94E-02, 7.51E-02,
5989 7.08E-02, 6.66E-02, 6.32E-02, 6.01E-02, 5.55E-02,
5990 5.24E-02, 4.93E-02, 4.63E-02, 4.41E-02, 4.15E-02,
5991 3.90E-02, 3.63E-02, 3.50E-02, 3.26E-02, 3.05E-02,
5992 2.94E-02, 2.73E-02, 2.62E-02, 2.46E-02, 2.36E-02,
5993 2.25E-02, 2.10E-02, 2.00E-02, 1.90E-02, 1.80E-02,
5994 1.76E-02, 1.70E-02, 1.60E-02, 1.50E-02, 1.49E-02,
5995 1.40E-02, 1.30E-02, 1.30E-02, 1.22E-02, 1.20E-02,
5996 1.20E-02, 1.10E-02, 1.10E-02, 1.10E-02, 1.00E-02,
5997 1.00E-02, 1.00E-02, 1.00E-02, 9.16E-03, 9.00E-03,
5998 9.00E-03, 9.00E-03, 9.00E-03, 8.49E-03, 8.00E-03,
5999 8.00E-03, 8.00E-03, 8.00E-03, 8.00E-03, 8.00E-03,
6000 8.00E-03, 7.00E-03, 8.00E-03, 7.00E-03, 7.00E-03,
6001 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
6002 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
6003 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
6004 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
6005 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03,
6006 7.00E-03, 7.00E-03, 8.00E-03, 8.00E-03, 8.00E-03,
6007 8.00E-03, 8.00E-03, 8.00E-03, 9.00E-03, 9.00E-03,
6008 9.00E-03, 9.07E-03, 1.00E-02, 1.00E-02, 1.00E-02,
6009 1.10E-02, 1.10E-02, 1.20E-02, 1.22E-02, 1.30E-02,
6010 1.31E-02, 1.40E-02, 1.50E-02, 1.60E-02, 1.70E-02,
6011 1.82E-02, 2.00E-02, 2.01E-02, 2.10E-02, 2.20E-02,
6012 2.28E-02, 2.30E-02, 2.30E-02, 2.30E-02, 2.30E-02,
6013 2.30E-02, 2.30E-02, 2.30E-02, 2.20E-02, 2.20E-02,
6014 2.20E-02, 2.10E-02, 2.10E-02, 2.00E-02, 2.00E-02,
6015 1.90E-02, 1.90E-02, 1.82E-02, 1.80E-02, 1.74E-02,
6016 1.70E-02, 1.63E-02, 1.60E-02, 1.50E-02, 1.49E-02,
6017 1.40E-02, 1.37E-02, 1.30E-02, 1.30E-02, 1.21E-02,
6018 1.20E-02, 1.13E-02, 1.09E-02, 1.00E-02, 9.34E-03,
6019 9.00E-03, 8.43E-03, 8.00E-03, 7.39E-03, 7.00E-03,
6020 6.00E-03, 6.00E-03, 5.74E-03, 5.00E-03, 5.00E-03,
6021 5.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6022 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6023 3.17E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6024 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6025 3.00E-03, 3.00E-03, 3.00E-03, 2.00E-03, 2.00E-03,
6026 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6027 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6028 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6029 1.04E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6030 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6031 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6032 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6033 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6034 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6035 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6036 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6037 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6038 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6039 1.00E-03, 1.00E-03, 1.41E-03, 2.00E-03, 2.00E-03,
6040 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6041 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6042 2.00E-03, 2.00E-03, 2.00E-03, 1.98E-03, 1.46E-03,
6043 1.05E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6044 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6045 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6046 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6047 1.00E-03, 1.00E-03, 1.71E-03, 2.00E-03, 2.00E-03,
6048 2.00E-03, 2.00E-03, 2.00E-03, 3.00E-03, 3.00E-03,
6049 3.82E-03, 4.00E-03, 4.17E-03, 5.00E-03, 6.00E-03,
6050 7.00E-03, 7.73E-03, 8.07E-03, 9.70E-03, 1.17E-02,
6051 1.31E-02, 1.47E-02, 1.64E-02, 1.81E-02, 2.07E-02,
6052 2.37E-02, 2.70E-02, 2.97E-02, 3.27E-02, 3.70E-02,
6053 4.13E-02, 4.49E-02, 4.89E-02, 5.38E-02, 5.98E-02,
6054 6.45E-02, 6.94E-02, 7.41E-02, 8.01E-02, 8.51E-02,
6055 9.00E-02, 9.49E-02, 9.88E-02, 1.01E-01, 1.04E-01,
6056 1.07E-01, 1.07E-01, 1.06E-01, 1.03E-01, 1.00E-01,
6057 9.66E-02, 8.93E-02, 8.35E-02, 7.92E-02, 7.33E-02,
6058 6.84E-02, 6.40E-02, 5.91E-02, 5.57E-02, 5.26E-02,
6059 5.03E-02, 4.75E-02, 4.48E-02, 4.26E-02, 4.07E-02,
6060 3.83E-02, 3.69E-02, 3.47E-02, 3.24E-02, 3.11E-02,
6061 2.85E-02, 2.69E-02, 2.55E-02, 2.42E-02, 2.21E-02,
6062 2.09E-02, 1.93E-02, 1.77E-02, 1.62E-02, 1.60E-02,
6063 1.44E-02, 1.36E-02, 1.30E-02, 1.16E-02, 1.10E-02,
6064 1.00E-02, 1.00E-02, 9.00E-03, 8.27E-03, 8.00E-03,
6065 7.45E-03, 7.00E-03, 7.00E-03, 6.18E-03, 6.00E-03,
6066 6.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03,
6067 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6068 4.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6069 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 2.07E-03,
6070 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6071 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6072 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6073 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6074 2.00E-03, 1.28E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6075 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6076 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6077 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6078 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6079 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6080 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6081 4.00E-03, 4.00E-03, 4.00E-03, 4.57E-03, 5.00E-03,
6082 5.00E-03, 5.64E-03, 6.00E-03, 6.67E-03, 7.00E-03,
6083 7.35E-03, 8.00E-03, 8.36E-03, 9.00E-03, 9.00E-03,
6084 1.00E-02, 1.00E-02, 1.00E-02, 1.00E-02, 1.00E-02,
6085 1.00E-02, 1.00E-02, 9.65E-03, 9.00E-03, 9.00E-03,
6086 8.00E-03, 8.00E-03, 7.69E-03, 7.00E-03, 7.00E-03,
6087 6.44E-03, 6.00E-03, 6.00E-03, 6.00E-03, 5.00E-03,
6088 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 4.00E-03,
6089 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 3.98E-03,
6090 3.01E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6091 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 2.54E-03,
6092 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6093 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6094 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6095 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6096 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6097 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6098 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6099 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6100 1.33E-03, 1.89E-03, 1.07E-03, 1.06E-03, 1.00E-03,
6101 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6102 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6103 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6104 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6105 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6106 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6107 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6108 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6109 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6110 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6111 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6112 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6113 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6114 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6115 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6116 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6117 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6118 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 5.50E-04,
6119 0.00E+00, 0.00E+00, 1.00E-03, 1.00E-03, 7.51E-04,
6120 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6121 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6122 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6123 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6124 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6125 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6126 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6127 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6128 0.00E+00, 0.00E+00, 0.00E+00, 1.34E-04, 1.00E-03,
6129 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6130 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6131 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6132 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6133 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6134 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6135 1.00E-03, 7.65E-05, 1.00E-03, 1.00E-03, 1.00E-03,
6136 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6137 1.00E-03, 1.20E-04, 0.00E+00, 0.00E+00, 0.00E+00,
6138 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6139 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6140 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6141 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6142 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6143 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6144 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6145 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6146 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6147 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,
6148 0.00E+00, 6.09E-04, 3.47E-04, 6.97E-04, 2.60E-04,
6149 7.81E-04, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6150 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6151 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6152 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6153 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6154 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6155 1.00E-03, 1.68E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6156 2.00E-03, 2.76E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6157 3.80E-03, 4.00E-03, 4.82E-03, 5.00E-03, 5.84E-03,
6158 6.00E-03, 6.85E-03, 7.85E-03, 8.86E-03, 9.86E-03,
6159 1.09E-02, 1.19E-02, 1.29E-02, 1.47E-02, 1.59E-02,
6160 1.77E-02, 1.97E-02, 2.09E-02, 2.27E-02, 2.47E-02,
6161 2.67E-02, 2.87E-02, 3.07E-02, 3.26E-02, 3.38E-02,
6162 3.56E-02, 3.68E-02, 3.86E-02, 3.90E-02, 3.98E-02,
6163 4.07E-02, 4.10E-02, 4.10E-02, 4.03E-02, 3.93E-02,
6164 3.83E-02, 3.73E-02, 3.64E-02, 3.48E-02, 3.34E-02,
6165 3.18E-02, 2.99E-02, 2.85E-02, 2.70E-02, 2.50E-02,
6166 2.31E-02, 2.11E-02, 1.92E-02, 1.76E-02, 1.63E-02,
6167 1.47E-02, 1.34E-02, 1.17E-02, 1.07E-02, 9.78E-03,
6168 8.81E-03, 7.84E-03, 6.88E-03, 6.00E-03, 5.94E-03,
6169 5.00E-03, 5.00E-03, 4.05E-03, 4.00E-03, 3.13E-03,
6170 3.00E-03, 3.00E-03, 2.24E-03, 2.00E-03, 2.00E-03,
6171 2.00E-03, 2.00E-03, 2.00E-03, 2.00E-03, 1.54E-03,
6172 1.41E-03, 1.64E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6173 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6174 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6175 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6176 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6177 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6178 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6179 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6180 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6181 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03, 1.00E-03,
6182 1.00E-03, 1.15E-03, 2.00E-03, 2.00E-03, 2.00E-03,
6183 2.00E-03, 2.00E-03, 2.00E-03, 2.56E-03, 3.00E-03,
6184 3.00E-03, 3.30E-03, 4.00E-03, 4.00E-03, 4.04E-03,
6185 4.95E-03, 5.85E-03, 6.00E-03, 6.67E-03, 7.58E-03,
6186 8.48E-03, 9.39E-03, 1.03E-02, 1.14E-02, 1.31E-02,
6187 1.40E-02, 1.58E-02, 1.76E-02, 1.94E-02, 2.12E-02,
6188 2.30E-02, 2.56E-02, 2.89E-02, 3.16E-02, 3.44E-02,
6189 3.80E-02, 4.16E-02, 4.52E-02, 4.87E-02, 5.23E-02,
6190 5.59E-02, 5.91E-02, 6.20E-02, 6.53E-02, 6.71E-02,
6191 6.89E-02, 6.98E-02, 7.07E-02, 7.10E-02, 7.10E-02,
6192 7.06E-02, 6.97E-02, 6.89E-02, 6.80E-02, 6.71E-02,
6193 6.54E-02, 6.43E-02, 6.29E-02, 6.11E-02, 5.94E-02,
6194 5.74E-02, 5.48E-02, 5.31E-02, 5.05E-02, 4.86E-02,
6195 4.62E-02, 4.41E-02, 4.23E-02, 4.03E-02, 3.78E-02,
6196 3.61E-02, 3.43E-02, 3.26E-02, 3.08E-02, 2.91E-02,
6197 2.73E-02, 2.58E-02, 2.49E-02, 2.31E-02, 2.22E-02,
6198 2.07E-02, 1.95E-02, 1.86E-02, 1.77E-02, 1.69E-02,
6199 1.60E-02, 1.51E-02, 1.43E-02, 1.40E-02, 1.35E-02,
6200 1.27E-02, 1.18E-02, 1.10E-02, 1.10E-02, 1.02E-02,
6201 1.00E-02, 1.00E-02, 9.67E-03, 8.81E-03, 8.05E-03,
6202 8.90E-03, 8.24E-03, 8.00E-03, 7.53E-03, 7.00E-03,
6203 7.00E-03, 7.00E-03, 7.00E-03, 7.00E-03, 6.42E-03,
6204 6.00E-03, 6.00E-03, 6.00E-03, 6.00E-03, 5.18E-03,
6205 5.00E-03, 5.00E-03, 5.00E-03, 4.80E-03, 4.04E-03,
6206 4.89E-03, 4.27E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6207 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6208 4.00E-03, 4.00E-03, 4.00E-03, 3.20E-03, 3.00E-03,
6209 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6210 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6211 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03, 3.00E-03,
6212 3.00E-03, 3.75E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6213 4.00E-03, 4.00E-03, 4.69E-03, 5.00E-03, 5.00E-03,
6214 5.15E-03, 5.97E-03, 6.00E-03, 6.61E-03, 7.43E-03,
6215 8.00E-03, 8.06E-03, 8.88E-03, 9.70E-03, 1.05E-02,
6216 1.13E-02, 1.21E-02, 1.30E-02, 1.38E-02, 1.52E-02,
6217 1.64E-02, 1.72E-02, 1.80E-02, 1.88E-02, 1.96E-02,
6218 2.04E-02, 2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02,
6219 2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02, 2.10E-02,
6220 2.05E-02, 2.00E-02, 1.99E-02, 1.91E-02, 1.90E-02,
6221 1.85E-02, 1.80E-02, 1.79E-02, 1.71E-02, 1.63E-02,
6222 1.55E-02, 1.47E-02, 1.40E-02, 1.40E-02, 1.33E-02,
6223 1.25E-02, 1.20E-02, 1.19E-02, 1.11E-02, 1.03E-02,
6224 1.00E-02, 9.75E-03, 9.00E-03, 9.00E-03, 8.37E-03,
6225 8.00E-03, 8.00E-03, 8.00E-03, 7.22E-03, 7.00E-03,
6226 7.00E-03, 6.86E-03, 6.07E-03, 6.00E-03, 6.00E-03,
6227 6.00E-03, 5.93E-03, 5.15E-03, 5.00E-03, 5.00E-03,
6228 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03,
6229 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03, 5.00E-03,
6230 5.00E-03, 5.00E-03, 5.00E-03, 4.68E-03, 4.00E-03,
6231 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6232 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6233 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03, 4.00E-03,
6234 1.00E-03, 2.00E-04, 0.};
6235
6236// #################################################################################
6237// ############################## WATER VAPOR MODELS ###############################
6238// #################################################################################
6239//! MPM87H2OAbsModel
6240/*!
6241 \param[out] pxsec cross section (absorption/volume mixing ratio) of
6242 H2O (lines+continuum) according to MPM87 [1/m]
6243 \param CCin scaling factor for the H2O-continuum [1]
6244 \param CLin scaling factor for the H2O-line strengths [1]
6245 \param CWin scaling factor for the H2O-line widths [1]
6246 \param model allows user defined input parameter set
6247 (CCin, CLin, and CWin)<br> or choice of
6248 pre-defined parameters of specific models (see note below).
6249 \param f_grid predefined frequency grid [Hz]
6250 \param abs_p predefined pressure grid [Pa]
6251 \param abs_t predefined temperature grid [K]
6252 \param vmr H2O volume mixing ratio [1]
6253
6254 \note Except for model 'user' the input parameters CCin, CLin, and CWin
6255 are neglected (model dominates over parameters).<br>
6256 Allowed models: 'MPM87', 'MPM87Lines', 'MPM87Continuum', and 'user'.
6257 See the user guide for detailed explanations.
6258
6259 \remark H. J. Liebe,<br>
6260 <i>A contribution to modeling atmospheric millimeter-wave properties</i>,<br>
6261 Frequenz, 41, 1987, 31-36<br>
6262 and<br>
6263 H. J. Liebe and D. H. Layton,<br>
6264 <i>Millimeter-wave properties of the atmosphere:
6265 Laboratory studies and propagation modeling</i>,<br>
6266 U.S. Dept. of Commerce, National Telecommunications and Information
6267 Administration, Institute for Communication Sciences,<br>
6268 325 Broadway, Boulder, CO 80303-3328, report 87224.
6269
6270 \author Thomas Kuhn
6271 \date 2001-11-05
6272 */
6273
6274void MPM87H2OAbsModel (MatrixView pxsec,
6275 const Numeric CCin, // continuum scale factor
6276 const Numeric CLin, // line strength scale factor
6277 const Numeric CWin, // line broadening scale factor
6278 const String& model,
6279 ConstVectorView f_grid,
6280 ConstVectorView abs_p,
6281 ConstVectorView abs_t,
6282 ConstVectorView vmr,
6283 const Verbosity& verbosity)
6284{
6285 CREATE_OUT3ArtsOut3 out3(verbosity);
6286
6287 //
6288 // Coefficients are from Liebe, Radio Science, 20(5), 1985, 1069
6289 // 0 1 2 3
6290 // f0 b1 b2 b3
6291 // [GHz] [kHz/kPa] [1] [GHz/kPa]
6292 const Numeric mpm87[30][4] = {
6293 { 22.235080, 0.1090, 2.143, 27.84e-3},
6294 { 67.813960, 0.0011, 8.730, 27.60e-3},
6295 { 119.995940, 0.0007, 8.347, 27.00e-3},
6296 { 183.310117, 2.3000, 0.653, 31.64e-3},
6297 { 321.225644, 0.0464, 6.156, 21.40e-3},
6298 { 325.152919, 1.5400, 1.515, 29.70e-3},
6299 { 336.187000, 0.0010, 9.802, 26.50e-3},
6300 { 380.197372, 11.9000, 1.018, 30.36e-3},
6301 { 390.134508, 0.0044, 7.318, 19.00e-3},
6302 { 437.346667, 0.0637, 5.015, 13.70e-3},
6303 { 439.150812, 0.9210, 3.561, 16.40e-3},
6304 { 443.018295, 0.1940, 5.015, 14.40e-3},
6305 { 448.001075, 10.6000, 1.370, 23.80e-3},
6306 { 470.888947, 0.3300, 3.561, 18.20e-3},
6307 { 474.689127, 1.2800, 2.342, 19.80e-3},
6308 { 488.491133, 0.2530, 2.814, 24.90e-3},
6309 { 503.568532, 0.0374, 6.693, 11.50e-3},
6310 { 504.482692, 0.0125, 6.693, 11.90e-3},
6311 { 556.936002, 510.0000, 0.114, 30.00e-3},
6312 { 620.700807, 5.0900, 2.150, 22.30e-3},
6313 { 658.006500, 0.2740, 7.767, 30.00e-3},
6314 { 752.033227, 250.0000, 0.336, 28.60e-3},
6315 { 841.073593, 0.0130, 8.113, 14.10e-3},
6316 { 859.865000, 0.1330, 7.989, 28.60e-3},
6317 { 899.407000, 0.0550, 7.845, 28.60e-3},
6318 { 902.555000, 0.0380, 8.360, 26.40e-3},
6319 { 906.205524, 0.1830, 5.039, 23.40e-3},
6320 { 916.171582, 8.5600, 1.369, 25.30e-3},
6321 { 970.315022, 9.1600, 1.842, 24.00e-3},
6322 { 987.926764, 138.0000, 0.178, 28.60e-3}};
6323
6324 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6325 // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
6326 const Numeric CC_MPM87 = 1.00000;
6327 const Numeric CL_MPM87 = 1.00000;
6328 const Numeric CW_MPM87 = 1.00000;
6329 // ---------------------------------------------------------------------------------------
6330
6331
6332 // select the parameter set (!!model dominates values!!):
6333 Numeric CC, CL, CW;
6334 if ( model == "MPM87" )
6335 {
6336 CC = CC_MPM87;
6337 CL = CL_MPM87;
6338 CW = CW_MPM87;
6339 }
6340 else if ( model == "MPM87Lines" )
6341 {
6342 CC = 0.000;
6343 CL = CL_MPM87;
6344 CW = CW_MPM87;
6345 }
6346 else if ( model == "MPM87Continuum" )
6347 {
6348 CC = CC_MPM87;
6349 CL = 0.000;
6350 CW = 0.000;
6351 }
6352 else if ( model == "user" )
6353 {
6354 CC = CCin;
6355 CL = CLin;
6356 CW = CWin;
6357 }
6358 else
6359 {
6360 ostringstream os;
6361 os << "H2O-MPM87: ERROR! Wrong model values given.\n"
6362 << "Valid models are: 'MPM87', 'MPM87Lines', 'MPM87Continuum', and 'user'" << '\n';
6363 throw runtime_error(os.str());
6364 }
6365 out3 << "H2O-MPM87: (model=" << model << ") parameter values in use:\n"
6366 << " CC = " << CC << "\n"
6367 << " CL = " << CL << "\n"
6368 << " CW = " << CW << "\n";
6369
6370
6371 // number of lines of liebe line catalog (30 lines)
6372 const Index i_first = 0;
6373 const Index i_last = 29;
6374
6375 const Index n_p = abs_p.nelem(); // Number of pressure levels
6376 const Index n_f = f_grid.nelem(); // Number of frequencies
6377
6378 // Check that dimensions of abs_p, abs_t, and vmr agree:
6379 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6379
, "n_p==abs_t.nelem()") : (void)0)
;
6380 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6380
, "n_p==vmr.nelem()") : (void)0)
;
6381
6382 // Check that dimensions of pxsec are consistent with n_f
6383 // and n_p. It should be [n_f,n_p]:
6384 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6384
, "n_f==pxsec.nrows()") : (void)0)
;
6385 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6385
, "n_p==pxsec.ncols()") : (void)0)
;
6386
6387 // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
6388 for ( Index i=0; i<n_p; ++i )
6389 {
6390 // here the total pressure is not multiplied by the H2O vmr for the
6391 // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
6392 Numeric pwv_dummy = Pa_to_kPa * abs_p[i];
6393 // relative inverse temperature [1]
6394 Numeric theta = (300.0 / abs_t[i]);
6395 // H2O partial pressure [kPa]
6396 Numeric pwv = Pa_to_kPa * abs_p[i] * vmr[i];
6397 // dry air partial pressure [kPa]
6398 Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
6399 // H2O continuum absorption [dB/km/GHz2] like in the original MPM87
6400 Numeric Nppc = CC * pwv_dummy * pow(theta, (Numeric)3.0) * 1.000e-5
6401 * ( (0.113 * pda) + (3.57 * pwv * pow(theta, (Numeric)7.8)) );
6402
6403 // Loop over input frequency
6404 for ( Index s=0; s<n_f; ++s )
6405 {
6406 // input frequency in [GHz]
6407 Numeric ff = f_grid[s] * Hz_to_GHz;
6408 // H2O line contribution at position f
6409 Numeric Nppl = 0.000;
6410
6411 // Loop over MPM89 H2O spectral lines
6412 for ( Index l = i_first; l <= i_last; ++l )
6413 {
6414 // line strength [kHz]
6415 Numeric strength = CL * pwv_dummy * mpm87[l][1]
6416 * pow(theta,(Numeric)3.5) * exp(mpm87[l][2]*(1.000-theta));
6417 // line broadening parameter [GHz]
6418 Numeric gam = CW * mpm87[l][3] *
6419 ( (4.80 * pwv * pow(theta, (Numeric)1.1)) +
6420 ( pda * pow(theta, (Numeric)0.6)) );
6421 // effective line width with Doppler broadening [GHz]
6422 // gam = sqrt(gam*gam + (2.14e-12 * mpm87[l][0] * mpm87[l][0] / theta));
6423 // H2O line absorption [dB/km/GHz] like in the original MPM87
6424 Nppl += strength * MPMLineShapeFunction(gam, mpm87[l][0], ff);
6425 }
6426 // pxsec = abs/vmr [1/m] but MPM87 is in [dB/km] --> conversion necessary
6427 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * ( Nppl + (Nppc * ff) );
6428 }
6429 }
6430 return;
6431}
6432//
6433// #################################################################################
6434//! MPM89H2OAbsModel
6435/*!
6436 \param[out] pxsec cross section (absorption/volume mixing ratio) of
6437 H2O (lines+continuum) according to MPM89 [1/m]
6438 \param CCin scaling factor for the H2O-continuum [1]
6439 \param CLin scaling factor for the line strengths [1]
6440 \param CWin scaling factor for the line widths [1]
6441 \param model allows user defined input parameter set
6442 (CCin, CLin, and CWin)<br> or choice of
6443 pre-defined parameters of specific models (see note below).
6444 \param f_grid predefined frequency grid [Hz]
6445 \param abs_p predefined pressure grid [Pa]
6446 \param abs_t predefined temperature grid [K]
6447 \param vmr H2O volume mixing ratio [1]
6448
6449 \note Except for model 'user' the input parameters CCin, CLin, and CWin
6450 are neglected (model dominates over parameters).<br>
6451 Allowed models: 'MPM89', 'MPM89Lines', 'MPM89Continuum', and 'user'.
6452 See the user guide for detailed explanations.
6453
6454 \remark Reference: H. J. Liebe, Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631.
6455
6456 \author Thomas Kuhn
6457 \date 2001-11-05
6458 */
6459
6460void MPM89H2OAbsModel (MatrixView pxsec,
6461 const Numeric CCin, // continuum scale factor
6462 const Numeric CLin, // line strength scale factor
6463 const Numeric CWin, // line broadening scale factor
6464 const String& model, // model
6465 ConstVectorView f_grid,
6466 ConstVectorView abs_p,
6467 ConstVectorView abs_t,
6468 ConstVectorView vmr,
6469 const Verbosity& verbosity)
6470{
6471 CREATE_OUT3ArtsOut3 out3(verbosity);
6472
6473 //
6474 // Coefficients are from Liebe, Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631
6475 // 0 1 2 3 4 5 6
6476 // f0 b1 b2 b3 b4 b5 b6
6477 // [GHz] [kHz/kPa] [1] [MHz/kPa] [1] [1] [1]
6478 const Numeric mpm89[30][7] = {
6479 { 22.235080, 0.1090, 2.143, 28.11, 0.69, 4.80, 1.00},
6480 { 67.813960, 0.0011, 8.735, 28.58, 0.69, 4.93, 0.82},
6481 { 119.995940, 0.0007, 8.356, 29.48, 0.70, 4.78, 0.79},
6482 { 183.310074, 2.3000, 0.668, 28.13, 0.64, 5.30, 0.85},
6483 { 321.225644, 0.0464, 6.181, 23.03, 0.67, 4.69, 0.54},
6484 { 325.152919, 1.5400, 1.540, 27.83, 0.68, 4.85, 0.74},
6485 { 336.187000, 0.0010, 9.829, 26.93, 0.69, 4.74, 0.61},
6486 { 380.197372, 11.9000, 1.048, 28.73, 0.69, 5.38, 0.84},
6487 { 390.134508, 0.0044, 7.350, 21.52, 0.63, 4.81, 0.55},
6488 { 437.346667, 0.0637, 5.050, 18.45, 0.60, 4.23, 0.48},
6489 { 439.150812, 0.9210, 3.596, 21.00, 0.63, 4.29, 0.52},
6490 { 443.018295, 0.1940, 5.050, 18.60, 0.60, 4.23, 0.50},
6491 { 448.001075, 10.6000, 1.405, 26.32, 0.66, 4.84, 0.67},
6492 { 470.888947, 0.3300, 3.599, 21.52, 0.66, 4.57, 0.65},
6493 { 474.689127, 1.2800, 2.381, 23.55, 0.65, 4.65, 0.64},
6494 { 488.491133, 0.2530, 2.853, 26.02, 0.69, 5.04, 0.72},
6495 { 503.568532, 0.0374, 6.733, 16.12, 0.61, 3.98, 0.43},
6496 { 504.482692, 0.0125, 6.733, 16.12, 0.61, 4.01, 0.45},
6497 { 556.936002, 510.0000, 0.159, 32.10, 0.69, 4.11, 1.00},
6498 { 620.700807, 5.0900, 2.200, 24.38, 0.71, 4.68, 0.68},
6499 { 658.006500, 0.2740, 7.820, 32.10, 0.69, 4.14, 1.00},
6500 { 752.033227, 250.0000, 0.396, 30.60, 0.68, 4.09, 0.84},
6501 { 841.073593, 0.0130, 8.180, 15.90, 0.33, 5.76, 0.45},
6502 { 859.865000, 0.1330, 7.989, 30.60, 0.68, 4.09, 0.84},
6503 { 899.407000, 0.0550, 7.917, 29.85, 0.68, 4.53, 0.90},
6504 { 902.555000, 0.0380, 8.432, 28.65, 0.70, 5.10, 0.95},
6505 { 906.205524, 0.1830, 5.111, 24.08, 0.70, 4.70, 0.53},
6506 { 916.171582, 8.5600, 1.442, 26.70, 0.70, 4.78, 0.78},
6507 { 970.315022, 9.1600, 1.920, 25.50, 0.64, 4.94, 0.67},
6508 { 987.926764, 138.0000, 0.258, 29.85, 0.68, 4.55, 0.90}};
6509
6510 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6511 // standard values for the MPM89 model
6512 // (Liebe, Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631):
6513 const Numeric CC_MPM89 = 1.00000;
6514 const Numeric CL_MPM89 = 1.00000;
6515 const Numeric CW_MPM89 = 1.00000;
6516 // ---------------------------------------------------------------------------------------
6517
6518
6519 // select the parameter set (!!model goes for values!!):
6520 Numeric CC, CL, CW;
6521 if ( model == "MPM89" )
6522 {
6523 CC = CC_MPM89;
6524 CL = CL_MPM89;
6525 CW = CW_MPM89;
6526 }
6527 else if ( model == "MPM89Lines" )
6528 {
6529 CC = 0.000;
6530 CL = CL_MPM89;
6531 CW = CW_MPM89;
6532 }
6533 else if ( model == "MPM89Continuum" )
6534 {
6535 CC = CC_MPM89;
6536 CL = 0.000;
6537 CW = 0.000;
6538 }
6539 else if ( model == "user" )
6540 {
6541 CC = CCin;
6542 CL = CLin;
6543 CW = CWin;
6544 }
6545 else
6546 {
6547 ostringstream os;
6548 os << "H2O-MPM89: ERROR! Wrong model values given.\n"
6549 << "Valid models are: 'MPM89', 'MPM89Lines', 'MPM89Continuum', and 'user'" << '\n';
6550 throw runtime_error(os.str());
6551 }
6552 out3 << "H2O-MPM89: (model=" << model << ") parameter values in use:\n"
6553 << " CC = " << CC << "\n"
6554 << " CL = " << CL << "\n"
6555 << " CW = " << CW << "\n";
6556
6557
6558 // number of lines of Liebe line catalog (30 lines)
6559 const Index i_first = 0;
6560 const Index i_last = 29;
6561
6562 const Index n_p = abs_p.nelem(); // Number of pressure levels
6563 const Index n_f = f_grid.nelem(); // Number of frequencies
6564
6565 // Check that dimensions of abs_p, abs_t, and vmr agree:
6566 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6566
, "n_p==abs_t.nelem()") : (void)0)
;
6567 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6567
, "n_p==vmr.nelem()") : (void)0)
;
6568
6569 // Check that dimensions of pxsec are consistent with n_f
6570 // and n_p. It should be [n_f,n_p]:
6571 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6571
, "n_f==pxsec.nrows()") : (void)0)
;
6572 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6572
, "n_p==pxsec.ncols()") : (void)0)
;
6573
6574 // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
6575 for ( Index i=0; i<n_p; ++i )
6576 {
6577 // here the total pressure is not multiplied by the H2O vmr for the
6578 // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
6579 Numeric pwv_dummy = Pa_to_kPa * abs_p[i];
6580 // relative inverse temperature [1]
6581 Numeric theta = (300.0 / abs_t[i]);
6582 // H2O partial pressure [kPa]
6583 Numeric pwv = Pa_to_kPa * abs_p[i] * vmr[i];
6584 // dry air partial pressure [kPa]
6585 Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
6586 // H2O continuum absorption [dB/km/GHz^2] like in the original MPM89
6587 Numeric Nppc = CC * pwv_dummy * pow(theta, (Numeric)3.0) * 1.000e-5
6588 * ( (0.113 * pda) + (3.57 * pwv * pow(theta, (Numeric)7.5)) );
6589
6590 // Loop over input frequency
6591 for ( Index s=0; s<n_f; ++s )
6592 {
6593 // input frequency in [GHz]
6594 Numeric ff = f_grid[s] * Hz_to_GHz;
6595 // H2O line contribution at position f
6596 Numeric Nppl = 0.000;
6597
6598 // Loop over MPM89 spectral lines:
6599 for ( Index l = i_first; l <= i_last; ++l )
6600 {
6601 // line strength [kHz]
6602 Numeric strength = CL * pwv_dummy * mpm89[l][1]
6603 * pow(theta, (Numeric)3.5) * exp(mpm89[l][2]*(1.000-theta));
6604 // line broadening parameter [GHz]
6605 Numeric gam = CW * mpm89[l][3] * 0.001
6606 * ( mpm89[l][5] * pwv * pow(theta, mpm89[l][6]) +
6607 pda * pow(theta, mpm89[l][4]) );
6608 // Doppler line width [GHz]
6609 // Numeric gamd = 1.46e-6 * mpm89[l][0] / sqrt(theta);
6610 // effective line width [GHz]
6611 // gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
6612 // H2O line absorption [dB/km/GHz] like in the original MPM89
6613 Nppl += strength * MPMLineShapeFunction(gam, mpm89[l][0], ff);
6614 }
6615 // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
6616 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * ( Nppl + (Nppc * ff) );
6617 }
6618 }
6619 return;
6620}
6621//
6622// #################################################################################
6623//! MPM02H2OAbsModel
6624/*!
6625 \param[out] pxsec cross section (absorption/volume mixing ratio) of
6626 H2O (lines+continuum) according to MPM93 [1/m]
6627 \param CCin scaling factor for the H2O-continuum [1]
6628 \param CLin scaling factor for the line strengths [1]
6629 \param CWin scaling factor for the line widths [1]
6630 \param model allows user defined input parameter set
6631 (CCin, CLin, and CWin)<br> or choice of
6632 pre-defined parameters of specific models (see note below).
6633 \param f_grid predefined frequency grid [Hz]
6634 \param abs_p predefined pressure grid [Pa]
6635 \param abs_t predefined temperature grid [K]
6636 \param vmr H2O volume mixing ratio [1]
6637
6638 \note Except for model 'user' the input parameters CCin, CLin, and CWin
6639 are neglected (model dominates over parameters).<br>
6640 Allowed models: 'MPM93', 'MPM93Lines', 'MPM93Continuum',
6641 and 'user'. See the user guide for detailed explanations.
6642
6643 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
6644 <i>Propagation modeling of moist air and suspended water/ice
6645 particles at frequencies below 1000 GHz</i>,<br>
6646 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
6647 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
6648
6649 \attention Corrected version of MPM93 by TKS, iup, 2002
6650 The H2O lines at 547.676440 GHz and 552.020960 GHz are isotopologue lines:<br>
6651 547 GHz is from the isotopologue 1-8-1 (HITRAN code 181, JPL code 20003) with an
6652 isotopologue ratio of 0.00199983 and <br>
6653 552 GHz is from the isotopologue 1-7-1 (HITRAN code 171, JPL code 19003) with an
6654 isotopologue ratio of 0.00037200.<br>
6655 The original source code of MPM93 has these isotopologue ratios not included
6656 in the line strength parameter b1, which is an error.<br>
6657 In the arts implementation the line strength parameter b1 of these two lines
6658 is multiplied with the appropriate isotopologue ratio.
6659
6660 \author Thomas Kuhn
6661 \date 2002-05-06
6662 */
6663
6664void MPM02H2OAbsModel (MatrixView pxsec,
6665 const Numeric CCin, // continuum scale factor
6666 const Numeric CLin, // line strength scale factor
6667 const Numeric CWin, // line broadening scale factor
6668 const String& model,
6669 ConstVectorView f_grid,
6670 ConstVectorView abs_p,
6671 ConstVectorView abs_t,
6672 ConstVectorView vmr,
6673 const Verbosity& verbosity)
6674{
6675 CREATE_OUT3ArtsOut3 out3(verbosity);
6676
6677 //
6678 /*
6679CTKS OTHER DATA USED IF NOT FROM THEORETICAL CALC. IN A. BAUER ET AL. 41(1989)49-54:
6680CTKS --------------------------------------------------------------------------------------------------------------
6681CTKS | T=300 K | T=300 K | T=300 K |
6682CTKS F ISO|GWVHZO NWVHZO| GWVNZ NWVNZ| GWVAIR NWVAIR| REFERENCE
6683CTKS GHZ 1 |MHZ/TORR 1 | MHZ/TORR 1 | MHZ/TORR 1 |
6684CTKS --------------------------------------------------------------------------------------------------------------
6685CTKS 22.2 1 18.00(18) - 4.10 -- 3.77 -- LIEBE ET AL., J.CHEM.PHYS., 50(1969)727
6686CTKS 183.3 1 19.88 0.85 4.07(7) 0.63(10) 3.75(6) 0.64(10) A. BAUER ET AL. JQSRT 41(1989)49-54
6687CTKS 183.3 1 - - 4.19(17) 0.74(3) 3.89(14) 0.76(3) T. M. GOYETTE ET AL. J. MOLEC. SPEC, 143(1990)346
6688CTKS 203.4 2 -- -- 4.214 0.93 3.833 0.89 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
6689CTKS 225.9 4 -- -- 4.21 0.70 3.798 0.75 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
6690CTKS 241.6 4 -- -- 4.45 0.77 4.08 0.80 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
6691CTKS 241.9 4 -- -- 3.47 0.67 3.07 0.70 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
6692CTKS 325.1 1 -- -- 4.011 0.63 3.633 0.64 J.-M. COLMONT ET AL. J. MOLEC. SPEC. 193(1999)233-243
6693CTKS 380.2 1 20.61(7) 0.89(1) 4.24(7) 0.52(14) 3.83(6) 0.54(14) A. BAUER ET AL. JQSRT 41(1987) 531
6694CTKS 380.2 1 - - 4.16(4) 0.70(3) 3.80 0.72 T. M. GOYETTE ET AL. JQSRT 41(1993)485
6695CTKS 439.2 1 12.95(25)0.62(9) -- -- -- -- V. N. MARKOV, J. MOLEC. SPEC, 164(1994)233
6696CTKS 752.0 1 4.16(18) -- 3.75 -- S. S. D. GASSTER ET AL. JOSA, 5(1988)593
6697CTKS 987.9 1 4.42(23) -- 4.01 -- S. S. D. GASSTER ET AL. JOSA, 5(1988)593
6698*/
6699 // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
6700 // 0 1 2 3 4 5 6
6701 // f0 b1 b2 b3 b4 b5 b6
6702 // [MHz] [kHz/kPa] [1] [MHz/hPa] [1] [1]
6703 // air self air self
6704 const Numeric mpm02[35][7] = {
6705 { 22235.0800, 0.10947, 2.1678, 2.811, 4.80, 0.69, 0.61},
6706 { 67803.9600, 0.00111, 8.7518, 2.858, 4.93, 0.69, 0.82},
6707 { 119995.9400, 0.00072, 8.3688, 2.948, 4.78, 0.70, 0.79},
6708 { 183310.1170, 2.30351, 0.6794, 3.050, 5.30, 0.76, 0.85},
6709 { 321225.6400, 0.04646, 6.1792, 2.303, 4.69, 0.67, 0.54},
6710 { 325152.9190, 1.53869, 1.5408, 2.783, 4.85, 0.68, 0.74},
6711 { 336227.6200, 0.00099, 9.8233, 2.693, 4.74, 0.64, 0.61},
6712 { 380197.3720, 11.9079, 1.0439, 2.873, 5.38, 0.72, 0.89},
6713 { 390134.5080, 0.00437, 7.3408, 2.152, 4.81, 0.63, 0.55},
6714 { 437346.6670, 0.06378, 5.0384, 1.845, 4.23, 0.60, 0.48},
6715 { 439150.8120, 0.92144, 3.5853, 2.100, 4.29, 0.63, 0.62},
6716 { 443018.2950, 0.19384, 5.0384, 1.860, 4.23, 0.60, 0.50},
6717 { 448001.0750, 10.6190, 1.3952, 2.632, 4.84, 0.66, 0.67},
6718 { 470888.9470, 0.33005, 3.5853, 2.152, 4.57, 0.66, 0.65},
6719 { 474689.1270, 1.27660, 2.3674, 2.355, 4.65, 0.65, 0.64},
6720 { 488491.1330, 0.25312, 2.8391, 2.602, 5.04, 0.69, 0.72},
6721 { 503568.5320, 0.03746, 6.7158, 1.612, 3.98, 0.61, 0.43},
6722 { 504482.6920, 0.01250, 6.7158, 1.612, 4.01, 0.61, 0.45},
6723 { 547676.4400, 1.01467, 0.1427, 2.600, 4.50, 0.69, 1.00}, // *
6724 { 552020.9600, 0.18668, 0.1452, 2.600, 4.50, 0.69, 1.00}, // *
6725 { 556936.0020, 510.51086, 0.1405, 3.210, 4.11, 0.69, 1.00},
6726 { 620700.8070, 5.10539, 2.3673, 2.438, 4.68, 0.71, 0.68},
6727 { 645905.6200, 0.00667, 8.6065, 1.800, 4.00, 0.60, 0.43},
6728 { 658006.5500, 0.27451, 7.7889, 3.210, 4.14, 0.69, 1.00},
6729 { 752033.2270, 249.68466, 0.3625, 3.060, 4.09, 0.68, 0.84},
6730 { 841051.1620, 0.01308, 8.1347, 1.590, 5.76, 0.33, 0.45},
6731 { 859965.6490, 0.13326, 8.0114, 3.060, 4.09, 0.68, 0.84},
6732 { 899302.1710, 0.05492, 7.8676, 2.985, 4.53, 0.68, 0.90},
6733 { 902609.4360, 0.03854, 8.3823, 2.865, 5.10, 0.70, 0.95},
6734 { 906206.1180, 0.18323, 5.0628, 2.408, 4.70, 0.70, 0.53},
6735 { 916171.5820, 8.56444, 1.3943, 2.670, 4.78, 0.70, 0.78},
6736 { 923113.1900, 0.00784, 10.2441, 2.900, 5.00, 0.66, 0.67},
6737 { 970315.0220, 9.16280, 1.8673, 2.550, 4.94, 0.64, 0.67},
6738 { 987926.7640, 138.28461, 0.2045, 2.985, 4.55, 0.68, 0.90},
6739 //--------------------------------------------------------------------
6740 { 1780.000000, 2230.00000, 0.952, 17.620, 30.50, 2.00, 5.00}}; // pseudo continuum line
6741
6742 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6743 // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
6744 // "Propagation modeling of moist air and suspended water/ice
6745 // particles at frequencies below 1000 GHz",
6746 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
6747 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
6748 const Numeric CC_MPM02 = 1.00000;
6749 const Numeric CL_MPM02 = 1.00000;
6750 const Numeric CW_MPM02 = 1.00000;
6751 // ---------------------------------------------------------------------------------------
6752
6753
6754 // select the parameter set (!!model dominates values!!):
6755 Numeric CC, CL, CW;
6756 // number of lines of Liebe line catalog (0-33 lines, 34 cont. pseudo line)
6757 Index i_first = 0;
6758 Index i_last = 34;
6759 if ( model == "MPM02" )
6760 {
6761 CC = CC_MPM02;
6762 CL = CL_MPM02;
6763 CW = CW_MPM02;
6764 i_first = 0;
6765 i_last = 34;
6766 }
6767 else if ( model == "MPM02Lines" )
6768 {
6769 CC = 0.000;
6770 CL = CL_MPM02;
6771 CW = CW_MPM02;
6772 i_first = 0;
6773 i_last = 33;
6774 }
6775 else if ( model == "MPM02Continuum" )
6776 {
6777 CC = CC_MPM02;
6778 CL = 0.000;
6779 CW = 0.000;
6780 i_first = 34;
6781 i_last = 34;
6782 }
6783 else if ( model == "user" )
6784 {
6785 CC = CCin;
6786 CL = CLin;
6787 CW = CWin;
6788 i_first = 0;
6789 i_last = 34;
6790
6791 }
6792 else
6793 {
6794 ostringstream os;
6795 os << "H2O-MPM02: ERROR! Wrong model values given.\n"
6796 << "Valid models are: 'MPM02', 'MPM02Lines', 'MPM02Continuum', and 'user'" << '\n';
6797 throw runtime_error(os.str());
6798 }
6799 out3 << "H2O-MPM02: (model=" << model << ") parameter values in use:\n"
6800 << " CC = " << CC << "\n"
6801 << " CL = " << CL << "\n"
6802 << " CW = " << CW << "\n";
6803
6804
6805 const Index n_p = abs_p.nelem(); // Number of pressure levels
6806 const Index n_f = f_grid.nelem(); // Number of frequencies
6807
6808 // Check that dimensions of abs_p, abs_t, and vmr agree:
6809 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6809
, "n_p==abs_t.nelem()") : (void)0)
;
6810 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6810
, "n_p==vmr.nelem()") : (void)0)
;
6811
6812 // Check that dimensions of pxsec are consistent with n_f
6813 // and n_p. It should be [n_f,n_p]:
6814 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6814
, "n_f==pxsec.nrows()") : (void)0)
;
6815 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 6815
, "n_p==pxsec.ncols()") : (void)0)
;
6816
6817 // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
6818 for ( Index i=0; i<n_p; ++i )
6819 {
6820 // here the total pressure is not multiplied by the H2O vmr for the
6821 // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
6822 Numeric pwv_dummy = Pa_to_hPa * abs_p[i];
6823 // relative inverse temperature [1]
6824 Numeric theta = (300.0 / abs_t[i]);
6825 // H2O partial pressure [hPa]
6826 Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
6827 // dry air partial pressure [hPa]
6828 Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
6829 // Loop over MPM02 spectral lines:
6830
6831 // Loop over input frequency
6832 for ( Index s=0; s<n_f; ++s )
6833 {
6834 // input frequency in [GHz]
6835 Numeric ff = f_grid[s] * Hz_to_GHz;
6836
6837 for ( Index l = i_first; l <= i_last; ++l )
6838 {
6839 // line strength [ppm]. The missing vmr of H2O will be multiplied
6840 // at the stage of absorption calculation: abs / vmr * pxsec.
6841 Numeric strength = 0.00;
6842 Numeric gam = 0.00;
6843 if ( (l >= 0) && (l <= 33) ) // ---- just the lines ------------------
6844 {
6845 strength = CL * pwv_dummy * mpm02[l][1] *
6846 pow(theta, (Numeric)3.5) * exp(mpm02[l][2]*(1.0-theta));
6847 // line broadening parameter [GHz]
6848 gam = CW * mpm02[l][3] * 0.001 *
6849 ( (mpm02[l][4] * pwv * pow(theta, mpm02[l][6])) +
6850 ( pda * pow(theta, mpm02[l][5])) );
6851 }
6852 else if ( l == 34 ) // ----- just the continuum pseudo-line ----------
6853 {
6854 strength = CC * pwv_dummy * mpm02[l][1] *
6855 pow(theta, (Numeric)3.5) * exp(mpm02[l][2]*(1.0-theta));
6856 // line broadening parameter [GHz]
6857 gam = mpm02[l][3] * 0.001 *
6858 ( (mpm02[l][4] * pwv * pow(theta, mpm02[l][6])) +
6859 ( pda * pow(theta, mpm02[l][5])) );
6860 }
6861 else // ----- if something strange happens ---------------------------
6862 {
6863 ostringstream os;
6864 os << "H2O-MPM02: wrong line number detected l=" << l << " (0-34)\n";
6865 throw runtime_error(os.str());
6866 return;
6867 } // ---------------------------------------------------------------
6868 // Doppler line width [GHz]
6869 // Numeric gamd = 1.46e-6 * mpm02[l][0] / sqrt(theta);
6870 // effective line width [GHz]
6871 //gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
6872 // absorption [dB/km] like in the original MPM02
6873 Numeric Npp = strength * MPMLineShapeFunction(gam, mpm02[l][0], ff);
6874 // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
6875 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * Npp;
6876 }
6877 }
6878 }
6879 return;
6880}
6881//
6882//
6883// #################################################################################
6884//! MPM93H2OAbsModel
6885/*!
6886 \param[out] pxsec cross section (absorption/volume mixing ratio) of
6887 H2O (lines+continuum) according to MPM93 [1/m]
6888 \param CCin scaling factor for the H2O-continuum [1]
6889 \param CLin scaling factor for the line strengths [1]
6890 \param CWin scaling factor for the line widths [1]
6891 \param model allows user defined input parameter set
6892 (CCin, CLin, and CWin)<br> or choice of
6893 pre-defined parameters of specific models (see note below).
6894 \param f_grid predefined frequency grid [Hz]
6895 \param abs_p predefined pressure grid [Pa]
6896 \param abs_t predefined temperature grid [K]
6897 \param vmr H2O volume mixing ratio [1]
6898
6899 \note Except for model 'user' the input parameters CCin, CLin, and CWin
6900 are neglected (model dominates over parameters).<br>
6901 Allowed models: 'MPM93', 'MPM93Lines', 'MPM93Continuum',
6902 and 'user'. See the user guide for detailed explanations.
6903
6904 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
6905 <i>Propagation modeling of moist air and suspended water/ice
6906 particles at frequencies below 1000 GHz</i>,<br>
6907 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
6908 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
6909
6910 \attention The H2O lines at 547.676440 GHz and 552.020960 GHz are isotopologue lines:<br>
6911 547 GHz is from the isotopologue 1-8-1 (HITRAN code 181, JPL code 20003) with an
6912 isotopologue ratio of 0.00199983 and <br>
6913 552 GHz is from the isotopologue 1-7-1 (HITRAN code 171, JPL code 19003) with an
6914 isotopologue ratio of 0.00037200.<br>
6915 The original source code of MPM93 has these isotopologue ratios not included
6916 in the line strength parameter b1, which is an error.<br>
6917 In the arts implementation the line strength parameter b1 of these two lines
6918 is multiplied with the appropriate isotopologue ratio.
6919
6920 \author Thomas Kuhn
6921 \date 2001-11-05
6922 */
6923
6924void MPM93H2OAbsModel (MatrixView pxsec,
6925 const Numeric CCin, // continuum scale factor
6926 const Numeric CLin, // line strength scale factor
6927 const Numeric CWin, // line broadening scale factor
6928 const String& model,
6929 ConstVectorView f_grid,
6930 ConstVectorView abs_p,
6931 ConstVectorView abs_t,
6932 ConstVectorView vmr,
6933 const Verbosity& verbosity)
6934{
6935 CREATE_OUT3ArtsOut3 out3(verbosity);
6936
6937 //
6938 // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
6939 // 0 1 2 3 4 5 6
6940 // f0 b1 b2 b3 b4 b5 b6
6941 // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1] [1]
6942 const Numeric mpm93[35][7] = {
6943 { 22.235080, 0.01130, 2.143, 2.811, 4.80, 0.69, 1.00},
6944 { 67.803960, 0.00012, 8.735, 2.858, 4.93, 0.69, 0.82},
6945 { 119.995940, 0.00008, 8.356, 2.948, 4.78, 0.70, 0.79},
6946 { 183.310091, 0.24200, 0.668, 3.050, 5.30, 0.64, 0.85},
6947 { 321.225644, 0.00483, 6.181, 2.303, 4.69, 0.67, 0.54},
6948 { 325.152919, 0.14990, 1.540, 2.783, 4.85, 0.68, 0.74},
6949 { 336.222601, 0.00011, 9.829, 2.693, 4.74, 0.69, 0.61},
6950 { 380.197372, 1.15200, 1.048, 2.873, 5.38, 0.54, 0.89},
6951 { 390.134508, 0.00046, 7.350, 2.152, 4.81, 0.63, 0.55},
6952 { 437.346667, 0.00650, 5.050, 1.845, 4.23, 0.60, 0.48},
6953 { 439.150812, 0.09218, 3.596, 2.100, 4.29, 0.63, 0.52},
6954 { 443.018295, 0.01976, 5.050, 1.860, 4.23, 0.60, 0.50},
6955 { 448.001075, 1.03200, 1.405, 2.632, 4.84, 0.66, 0.67},
6956 { 470.888947, 0.03297, 3.599, 2.152, 4.57, 0.66, 0.65},
6957 { 474.689127, 0.12620, 2.381, 2.355, 4.65, 0.65, 0.64},
6958 { 488.491133, 0.02520, 2.853, 2.602, 5.04, 0.69, 0.72},
6959 { 503.568532, 0.00390, 6.733, 1.612, 3.98, 0.61, 0.43},
6960 { 504.482692, 0.00130, 6.733, 1.612, 4.01, 0.61, 0.45},
6961// { 547.676440, 0.97010, 0.114, 2.600, 4.50, 0.70, 1.00},
6962// { 552.020960, 1.47700, 0.114, 2.600, 4.50, 0.70, 1.00},
6963 { 547.676440, 0.97010*0.00199983, 0.114, 2.600, 4.50, 0.70, 1.00}, // isotopologue ratio multiplied
6964 { 552.020960, 1.47700*0.00037200, 0.114, 2.600, 4.50, 0.70, 1.00}, // isotopologue ratio multiplied
6965 { 556.936002, 48.74000, 0.159, 3.210, 4.11, 0.69, 1.00},
6966 { 620.700807, 0.50120, 2.200, 2.438, 4.68, 0.71, 0.68},
6967 { 645.866155, 0.00713, 8.580, 1.800, 4.00, 0.60, 0.50}, // ?? JPL tag 18003 (H2O) f_o = 645.7660100GHz
6968 { 658.005280, 0.03022, 7.820, 3.210, 4.14, 0.69, 1.00},
6969 { 752.033227, 23.96000, 0.396, 3.060, 4.09, 0.68, 0.84},
6970 { 841.053973, 0.00140, 8.180, 1.590, 5.76, 0.33, 0.45},
6971 { 859.962313, 0.01472, 7.989, 3.060, 4.09, 0.68, 0.84},
6972 { 899.306675, 0.00605, 7.917, 2.985, 4.53, 0.68, 0.90},
6973 { 902.616173, 0.00426, 8.432, 2.865, 5.10, 0.70, 0.95},
6974 { 906.207325, 0.01876, 5.111, 2.408, 4.70, 0.70, 0.53},
6975 { 916.171582, 0.83400, 1.442, 2.670, 4.78, 0.70, 0.78},
6976 { 923.118427, 0.00869, 10.220, 2.900, 5.00, 0.70, 0.80},
6977 { 970.315022, 0.89720, 1.920, 2.550, 4.94, 0.64, 0.67},
6978 { 987.926764, 13.21000, 0.258, 2.985, 4.55, 0.68, 0.90},
6979 //--------------------------------------------------------------------
6980 { 1780.000000, 2230.00000, 0.952, 17.620, 30.50, 2.00, 5.00}}; // pseudo continuum line
6981
6982 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
6983 // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
6984 // "Propagation modeling of moist air and suspended water/ice
6985 // particles at frequencies below 1000 GHz",
6986 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
6987 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
6988 const Numeric CC_MPM93 = 1.00000;
6989 const Numeric CL_MPM93 = 1.00000;
6990 const Numeric CW_MPM93 = 1.00000;
6991 // ---------------------------------------------------------------------------------------
6992
6993
6994 // select the parameter set (!!model dominates values!!):
6995 Numeric CC, CL, CW;
6996 // number of lines of Liebe line catalog (0-33 lines, 34 cont. pseudo line)
6997 Index i_first = 0;
6998 Index i_last = 34;
6999 if ( model == "MPM93" )
7000 {
7001 CC = CC_MPM93;
7002 CL = CL_MPM93;
7003 CW = CW_MPM93;
7004 i_first = 0;
7005 i_last = 34;
7006 }
7007 else if ( model == "MPM93Lines" )
7008 {
7009 CC = 0.000;
7010 CL = CL_MPM93;
7011 CW = CW_MPM93;
7012 i_first = 0;
7013 i_last = 33;
7014 }
7015 else if ( model == "MPM93Continuum" )
7016 {
7017 CC = CC_MPM93;
7018 CL = 0.000;
7019 CW = 0.000;
7020 i_first = 34;
7021 i_last = 34;
7022 }
7023 else if ( model == "user" )
7024 {
7025 CC = CCin;
7026 CL = CLin;
7027 CW = CWin;
7028 i_first = 0;
7029 i_last = 34;
7030
7031 }
7032 else
7033 {
7034 ostringstream os;
7035 os << "H2O-MPM93: ERROR! Wrong model values given.\n"
7036 << "Valid models are: 'MPM93', 'MPM93Lines', 'MPM93Continuum', and 'user'" << '\n';
7037 throw runtime_error(os.str());
7038 }
7039 out3 << "H2O-MPM93: (model=" << model << ") parameter values in use:\n"
7040 << " CC = " << CC << "\n"
7041 << " CL = " << CL << "\n"
7042 << " CW = " << CW << "\n";
7043
7044
7045 const Index n_p = abs_p.nelem(); // Number of pressure levels
7046 const Index n_f = f_grid.nelem(); // Number of frequencies
7047
7048 // Check that dimensions of abs_p, abs_t, and vmr agree:
7049 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7049
, "n_p==abs_t.nelem()") : (void)0)
;
7050 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7050
, "n_p==vmr.nelem()") : (void)0)
;
7051
7052 // Check that dimensions of pxsec are consistent with n_f
7053 // and n_p. It should be [n_f,n_p]:
7054 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7054
, "n_f==pxsec.nrows()") : (void)0)
;
7055 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7055
, "n_p==pxsec.ncols()") : (void)0)
;
7056
7057 // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
7058 for ( Index i=0; i<n_p; ++i )
7059 {
7060 // here the total pressure is not multiplied by the H2O vmr for the
7061 // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
7062 Numeric pwv_dummy = Pa_to_hPa * abs_p[i];
7063 // relative inverse temperature [1]
7064 Numeric theta = (300.0 / abs_t[i]);
7065 // H2O partial pressure [hPa]
7066 Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
7067 // dry air partial pressure [hPa]
7068 Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
7069 // Loop over MPM93 spectral lines:
7070
7071 // Loop over input frequency
7072 for ( Index s=0; s<n_f; ++s )
7073 {
7074 // input frequency in [GHz]
7075 Numeric ff = f_grid[s] * Hz_to_GHz;
7076
7077 for ( Index l = i_first; l <= i_last; ++l )
7078 {
7079 // line strength [ppm]. The missing vmr of H2O will be multiplied
7080 // at the stage of absorption calculation: abs / vmr * pxsec.
7081 Numeric strength = 0.00;
7082 Numeric gam = 0.00;
7083 if ( (l >= 0) && (l <= 33) ) // ---- just the lines ------------------
7084 {
7085 strength = CL * pwv_dummy * mpm93[l][1]
7086 * pow(theta, (Numeric)3.5) * exp(mpm93[l][2]*(1.0-theta));
7087 // line broadening parameter [GHz]
7088 gam = CW * mpm93[l][3] * 0.001 *
7089 ( (mpm93[l][4] * pwv * pow(theta, mpm93[l][6])) +
7090 ( pda * pow(theta, mpm93[l][5])) );
7091 }
7092 else if ( l == 34 ) // ----- just the continuum pseudo-line ----------
7093 {
7094 strength = CC * pwv_dummy * mpm93[l][1]
7095 * pow(theta, (Numeric)3.5) * exp(mpm93[l][2]*(1.0-theta));
7096 // line broadening parameter [GHz]
7097 gam = mpm93[l][3] * 0.001 *
7098 ( (mpm93[l][4] * pwv * pow(theta, mpm93[l][6])) +
7099 ( pda * pow(theta, mpm93[l][5])) );
7100 }
7101 else // ----- if something strange happens ---------------------------
7102 {
7103 ostringstream os;
7104 os << "H2O-MPM93: wrong line number detected l=" << l << " (0-34)\n";
7105 throw runtime_error(os.str());
7106 return;
7107 } // ---------------------------------------------------------------
7108 // Doppler line width [GHz]
7109 // Numeric gamd = 1.46e-6 * mpm93[l][0] / sqrt(theta);
7110 // effective line width [GHz]
7111 //gam = 0.535 * gam + sqrt(0.217*gam*gam + gamd*gamd);
7112 // absorption [dB/km] like in the original MPM93
7113 Numeric Npp = strength * MPMLineShapeFunction(gam, mpm93[l][0], ff);
7114 // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
7115 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * Npp;
7116 }
7117 }
7118 }
7119 return;
7120}
7121//
7122// #################################################################################
7123//! PWR98H2OAbsModel
7124/*!
7125 \param[out] pxsec cross section (absorption/volume mixing ratio) of
7126 H2O (lines+continuum) according to P. W. Rosenkranz, 1998 [1/m]
7127 \param CCin scaling factor for the H2O-continuum [1]
7128 \param CLin scaling factor for the line strengths [1]
7129 \param CWin scaling factor for the line widths [1]
7130 \param model allows user defined input parameter set
7131 (CCin, CLin, and CWin)<br> or choice of
7132 pre-defined parameters of specific models (see note below).
7133 \param f_grid predefined frequency grid [Hz]
7134 \param abs_p predefined pressure grid [Pa]
7135 \param abs_t predefined temperature grid [K]
7136 \param vmr H2O volume mixing ratio [1]
7137
7138 \note Except for model 'user' the input parameters CCin, CLin, and CWin
7139 are neglected (model dominates over parameters).<br>
7140 Allowed models: 'Rosenkranz', 'RosenkranzLines', 'RosenkranzContinuum',
7141 and 'user'. See the user guide for detailed explanations.
7142
7143 \remark Reference: P. W. Rosenkranz., Radio Science, 33(4), 919, 1998 and
7144 Radio Science, Vol. 34(4), 1025, 1999.
7145
7146 \author Thomas Kuhn
7147 \date 2001-11-05
7148 */
7149
7150void PWR98H2OAbsModel (MatrixView pxsec,
7151 const Numeric CCin, // continuum scale factor
7152 const Numeric CLin, // line strength scale factor
7153 const Numeric CWin, // line broadening scale factor
7154 const String& model,
7155 ConstVectorView f_grid,
7156 ConstVectorView abs_p,
7157 ConstVectorView abs_t,
7158 ConstVectorView vmr,
7159 const Verbosity& verbosity)
7160{
7161 CREATE_OUT3ArtsOut3 out3(verbosity);
7162
7163 // REFERENCES:
7164 // LINE INTENSITIES FROM HITRAN92 (SELECTION THRESHOLD=
7165 // HALF OF CONTINUUM ABSORPTION AT 1000 MB).
7166 // WIDTHS MEASURED AT 22,183,380 GHZ, OTHERS CALCULATED:
7167 // H.J.LIEBE AND T.A.DILLON, J.CHEM.PHYS. V.50, PP.727-732 (1969) &
7168 // H.J.LIEBE ET AL., JQSRT V.9, PP. 31-47 (1969) (22GHz);
7169 // A.BAUER ET AL., JQSRT V.37, PP.531-539 (1987) &
7170 // ASA WORKSHOP (SEPT. 1989) (380GHz);
7171 // AND A.BAUER ET AL., JQSRT V.41, PP.49-54 (1989) (OTHER LINES).
7172 // AIR-BROADENED CONTINUUM BASED ON LIEBE & LAYTON, NTIA
7173 // REPORT 87-224 (1987); SELF-BROADENED CONTINUUM BASED ON
7174 // LIEBE ET AL, AGARD CONF. PROC. 542 (MAY 1993),
7175 // BUT READJUSTED FOR LINE SHAPE OF
7176 // CLOUGH et al, ATMOS. RESEARCH V.23, PP.229-241 (1989).
7177 //
7178 // Coefficients are from P. W. Rosenkranz., Radio Science, 33(4), 919, 1998
7179 // line frequencies [GHz]
7180 const Numeric PWRfl[15] = { 22.2350800, 183.3101170, 321.2256400, 325.1529190, 380.1973720,
7181 439.1508120, 443.0182950, 448.0010750, 470.8889470, 474.6891270,
7182 488.4911330, 556.9360020, 620.7008070, 752.0332270, 916.1715820 };
7183 // line intensities at 300K [Hz * cm2] (see Janssen Appendix to Chap.2 for this)
7184 const Numeric PWRs1[15] = { 1.31e-14, 2.273e-12, 8.036e-14, 2.694e-12, 2.438e-11,
7185 2.179e-12, 4.624e-13, 2.562e-11, 8.369e-13, 3.263e-12,
7186 6.659e-13, 1.531e-9, 1.707e-11, 1.011e-9, 4.227e-11 };
7187 // T coeff. of intensities [1]
7188 const Numeric PWRb2[15] = { 2.144, 0.668, 6.179, 1.541, 1.048,
7189 3.595, 5.048, 1.405, 3.597, 2.379,
7190 2.852, 0.159, 2.391, 0.396, 1.441 };
7191 // air-broadened width parameters at 300K [GHz/hPa]
7192 const Numeric PWRw3[15] = { 0.00281, 0.00281, 0.00230, 0.00278, 0.00287,
7193 0.00210, 0.00186, 0.00263, 0.00215, 0.00236,
7194 0.00260, 0.00321, 0.00244, 0.00306, 0.00267 };
7195 // T-exponent of air-broadening [1]
7196 const Numeric PWRx[15] = { 0.69, 0.64, 0.67, 0.68, 0.54,
7197 0.63, 0.60, 0.66, 0.66, 0.65,
7198 0.69, 0.69, 0.71, 0.68, 0.70 };
7199 // self-broadened width parameters at 300K [GHz/hPa]
7200 const Numeric PWRws[15] = { 0.01349, 0.01491, 0.01080, 0.01350, 0.01541,
7201 0.00900, 0.00788, 0.01275, 0.00983, 0.01095,
7202 0.01313, 0.01320, 0.01140, 0.01253, 0.01275 };
7203
7204 // T-exponent of self-broadening [1]
7205 const Numeric PWRxs[15] = { 0.61, 0.85, 0.54, 0.74, 0.89,
7206 0.52, 0.50, 0.67, 0.65, 0.64,
7207 0.72, 1.00, 0.68, 0.84, 0.78 };
7208
7209 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
7210 // standard values for the MPM87 model (P. W. Rosenkranz., Radio Science, 33(4), 919, 1998):
7211 const Numeric CC_PWR98 = 1.00000;
7212 const Numeric CL_PWR98 = 1.00000;
7213 const Numeric CW_PWR98 = 1.00000;
7214 // ---------------------------------------------------------------------------------------
7215
7216
7217 // select the parameter set (!!model dominates values!!):
7218 Numeric CC, CL, CW;
7219 if ( model == "Rosenkranz" )
7220 {
7221 CC = CC_PWR98;
7222 CL = CL_PWR98;
7223 CW = CW_PWR98;
7224 }
7225 else if ( model == "RosenkranzLines" )
7226 {
7227 CC = 0.000;
7228 CL = CL_PWR98;
7229 CW = CW_PWR98;
7230 }
7231 else if ( model == "RosenkranzContinuum" )
7232 {
7233 CC = CC_PWR98;
7234 CL = 0.000;
7235 CW = 0.000;
7236 }
7237 else if ( model == "user" )
7238 {
7239 CC = CCin;
7240 CL = CLin;
7241 CW = CWin;
7242 }
7243 else
7244 {
7245 ostringstream os;
7246 os << "H2O-PWR98: ERROR! Wrong model values given.\n"
7247 << "Valid models are: 'Rosenkranz', 'RosenkranzLines', 'RosenkranzContinuum', and 'user'" << '\n';
7248 throw runtime_error(os.str());
7249 }
7250 out3 << "H2O-PWR98: (model=" << model << ") parameter values in use:\n"
7251 << " CC = " << CC << "\n"
7252 << " CL = " << CL << "\n"
7253 << " CW = " << CW << "\n";
7254
7255
7256 const Index n_p = abs_p.nelem(); // Number of pressure levels
7257 const Index n_f = f_grid.nelem(); // Number of frequencies
7258
7259 // Check that dimensions of abs_p, abs_t, and vmr agree:
7260 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7260
, "n_p==abs_t.nelem()") : (void)0)
;
7261 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7261
, "n_p==vmr.nelem()") : (void)0)
;
7262
7263 // Check that dimensions of pxsec are consistent with n_f
7264 // and n_p. It should be [n_f,n_p]:
7265 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7265
, "n_f==pxsec.nrows()") : (void)0)
;
7266 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7266
, "n_p==pxsec.ncols()") : (void)0)
;
7267
7268 // Loop pressure/temperature:
7269#pragma omp parallel for \
7270 if (!arts_omp_in_parallel() \
7271 && n_p >= arts_omp_get_max_threads())
7272 for ( Index i=0; i<n_p; ++i )
7273 {
7274 // here the total pressure is not multiplied by the H2O vmr for the
7275 // P_H2O calculation because we calculate pxsec and not abs: abs = vmr * pxsec
7276 Numeric pvap_dummy = Pa_to_hPa * abs_p[i];
7277 // water vapor partial pressure [hPa]
7278 Numeric pvap = Pa_to_hPa * abs_p[i] * vmr[i];
7279 // dry air partial pressure [hPa]
7280 Numeric pda = (Pa_to_hPa * abs_p[i]) - pvap;
7281 // Rosenkranz number density (Rosenkranz H2O mass density in [g/m³])
7282 // [g/m³] = [g*K / Pa*m³] * [Pa/K]
7283 // rho = (M_H2O / R) * (P_H2O / T)
7284 // rho = 2.1667 * abs_p * vmr / abs_t
7285 // den = 3.335e16 * rho
7286 // FIXME Numeric den = 3.335e16 * (2.1667 * abs_p[i] * vmr[i] / abs_t[i]);
7287 Numeric den_dummy = 3.335e16 * (2.1667 * abs_p[i] / abs_t[i]);
7288 // inverse relative temperature [1]
7289 Numeric ti = (300.0 / abs_t[i]);
7290 Numeric ti2 = pow(ti, (Numeric)2.5);
7291
7292 // continuum term [Np/km/GHz2]
7293 Numeric con = CC * pvap_dummy * pow(ti, (Numeric)3.0) * 1.000e-9
7294 * ( (0.543 * pda) + (17.96 * pvap * pow(ti, (Numeric)4.5)) );
7295
7296 // Loop over input frequency
7297 for ( Index s=0; s<n_f; ++s )
7298 {
7299 // input frequency in [GHz]
7300 Numeric ff = f_grid[s] * Hz_to_GHz;
7301 // line contribution at position f
7302 Numeric sum = 0.000;
7303
7304 // Loop over spectral lines
7305 for (Index l = 0; l < 15; l++)
7306 {
7307 Numeric width = ( CW * PWRw3[l] * pda * pow(ti, PWRx[l]) ) +
7308 ( PWRws[l] * pvap * pow(ti, PWRxs[l]));
7309 // Numeric width = CW * ( PWRw3[l] * pda * pow(ti, PWRx[l]) +
7310 // PWRws[l] * pvap * pow(ti, PWRxs[l]) );
7311 Numeric wsq = width * width;
7312 Numeric strength = CL * PWRs1[l] * ti2 * exp(PWRb2[l]*(1.0 - ti));
7313 // frequency differences
7314 Numeric df0 = ff - PWRfl[l];
7315 Numeric df1 = ff + PWRfl[l];
7316 // use Clough's definition of local line contribution
7317 Numeric base = width / (wsq + 562500.000);
7318 // positive and negative resonances
7319 Numeric res = 0.000;
7320 if (fabs(df0) < 750.0) res += width / (df0*df0 + wsq) - base;
7321 if (fabs(df1) < 750.0) res += width / (df1*df1 + wsq) - base;
7322 sum += strength * res * pow( (ff/PWRfl[l]),
7323 (Numeric)2.0 );
7324 }
7325 // line term [Np/km]
7326 Numeric absl = 0.3183e-4 * den_dummy * sum;
7327 // pxsec = abs/vmr [1/m] (Rosenkranz model in [Np/km])
7328 // 4.1907e-5 = 0.230259 * 0.1820 * 1.0e-3 (1/(10*log(e)) = 0.230259)
7329 pxsec(s,i) += 1.000e-3 * ( absl + (con * ff * ff) );
7330 }
7331 }
7332 return;
7333}
7334//
7335// #################################################################################
7336//
7337//! CP98H2OAbsModel
7338/*!
7339 \param[out] pxsec cross section (absorption/volume mixing ratio) of
7340 H2O (lines+continuum) according to Cruz-Pol 1998 [1/m]
7341 \param CCin scaling factor for the H2O-continuum [1]
7342 \param CLin scaling factor for the line strengths [1]
7343 \param CWin scaling factor for the line widths [1]
7344 \param model allows user defined input parameter set
7345 (CCin, CLin, and CWin)<br> or choice of
7346 pre-defined parameters of specific models (see note below).
7347 \param f_grid predefined frequency grid [Hz]
7348 \param abs_p predefined pressure grid [Pa]
7349 \param abs_t predefined temperature grid [K]
7350 \param vmr H2O volume mixing ratio [1]
7351
7352 \note Except for model 'user' the input parameters CCin, CLin, and CWin
7353 are neglected (model dominates over parameters).<br>
7354 Allowed models: 'CruzPol', 'CruzPolLines', 'CruzPolContinuum',
7355 and 'user'. See the user guide for detailed explanations.
7356
7357 \remark Reference: S. L. Cruz-Pol et al., Radio Science, 33(5), 1319, 1998.
7358
7359 \author Thomas Kuhn
7360 \date 2001-11-05
7361 */
7362
7363void CP98H2OAbsModel (MatrixView pxsec,
7364 const Numeric CCin, // continuum scale factor
7365 const Numeric CLin, // line strength scale factor
7366 const Numeric CWin, // line broadening scale factor
7367 const String& model,
7368 ConstVectorView f_grid,
7369 ConstVectorView abs_p,
7370 ConstVectorView abs_t,
7371 ConstVectorView vmr,
7372 const Verbosity& verbosity)
7373{
7374 CREATE_OUT3ArtsOut3 out3(verbosity);
7375
7376 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
7377 // standard values for the CP98 model (S. L. Cruz-Pol et al., Radio Science, 33(5), 1319, 1998):
7378 const Numeric CC_CP98 = 1.2369; // +/- 0.155 !LARGE!
7379 const Numeric CL_CP98 = 1.0639; // +/- 0.016
7380 const Numeric CW_CP98 = 1.0658; // +/- 0.0096
7381 // ---------------------------------------------------------------------------------------
7382
7383 // select the parameter set (!!model dominates values!!):
7384 Numeric CC, CL, CW;
7385 if ( model == "CruzPol" )
7386 {
7387 CC = CC_CP98;
7388 CL = CL_CP98;
7389 CW = CW_CP98;
7390 }
7391 else if ( model == "CruzPolLine" )
7392 {
7393 CC = 0.000;
7394 CL = CL_CP98;
7395 CW = CW_CP98;
7396 }
7397 else if ( model == "CruzPolContinuum" )
7398 {
7399 CC = CC_CP98;
7400 CL = 0.000;
7401 CW = 0.000;
7402 }
7403 else if ( model == "user" )
7404 {
7405 CC = CCin;
7406 CL = CLin;
7407 CW = CWin;
7408 }
7409 else
7410 {
7411 ostringstream os;
7412 os << "H2O-CP98: ERROR! Wrong model values given.\n"
7413 << "Valid models are: 'CruzPol', 'CruzPolLine', 'CruzPolContinuum', and 'user'" << "\n";
7414 throw runtime_error(os.str());
7415 }
7416 out3 << "H2O-CP98: (model=" << model << ") parameter values in use:\n"
7417 << " CC = " << CC << "\n"
7418 << " CL = " << CL << "\n"
7419 << " CW = " << CW << "\n";
7420
7421 const Index n_p = abs_p.nelem(); // Number of pressure levels
7422 const Index n_f = f_grid.nelem(); // Number of frequencies
7423
7424 // Check that dimensions of abs_p, abs_t, and vmr agree:
7425 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7425
, "n_p==abs_t.nelem()") : (void)0)
;
7426 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7426
, "n_p==vmr.nelem()") : (void)0)
;
7427
7428 // Check that dimensions of pxsec are consistent with n_f
7429 // and n_p. It should be [n_f,n_p]:
7430 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7430
, "n_f==pxsec.nrows()") : (void)0)
;
7431 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7431
, "n_p==pxsec.ncols()") : (void)0)
;
7432
7433 // Loop pressure/temperature (pressure in [hPa] therefore the factor 0.01)
7434 for ( Index i=0; i<n_p; ++i )
7435 {
7436 // calculate pxsec only if VMR(H2O) > VMRCalcLimit
7437 if (vmr[i] > VMRCalcLimit)
7438 {
7439 // relative inverse temperature [1]
7440 Numeric theta = (300.0 / abs_t[i]);
7441 // H2O partial pressure [hPa]
7442 Numeric pwv = Pa_to_hPa * abs_p[i] * vmr[i];
7443 // dry air partial pressure [hPa]
7444 Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
7445 // line strength
7446 Numeric TL = CL * 0.0109 * pwv * pow(theta,(Numeric)3.5)
7447 * exp(2.143*(1.0-theta));
7448 // line broadening parameter [GHz]
7449 Numeric gam = CW * 0.002784 *
7450 ( (pda * pow(theta,(Numeric)0.6))
7451 + (4.80 * pwv * pow(theta,(Numeric)1.1)) );
7452 // continuum term
7453 Numeric TC = CC * pwv * pow(theta, (Numeric)3.0) * 1.000e-7
7454 * ( (0.113 * pda) + (3.57 * pwv * pow(theta,(Numeric)7.5)) );
7455
7456 // Loop over input frequency
7457 for ( Index s=0; s<n_f; ++s )
7458 {
7459 // input frequency in [GHz]
7460 Numeric ff = f_grid[s] * Hz_to_GHz;
7461 Numeric TSf = MPMLineShapeFunction(gam, 22.235080, ff);
7462 // pxsec = abs/vmr [1/m] (Cruz-Pol model in [Np/km])
7463 pxsec(s,i) += 4.1907e-5 * ff * ( (TL * TSf) + (ff * TC) ) / vmr[i];
7464 }
7465 }
7466 }
7467 return;
7468}
7469//
7470// #################################################################################
7471//! Standard_H2O_self_continuum
7472/*!
7473 \param[out] pxsec cross section (absorption/volume mixing ratio) of the
7474 H2O-H2O continuum [1/m]
7475 \param Cin constant absorption strength [1/m / (Hz*Pa)²]
7476 \param xin temperature exponent of (300/T) [1]
7477 \param model allows user defined input parameter set
7478 (C and x)<br> or choice of
7479 pre-defined parameters of specific models (see note below).
7480 \param f_grid predefined frequency grid [Hz]
7481 \param abs_p predefined pressure grid [Pa]
7482 \param abs_t predefined temperature grid [K]
7483 \param vmr H2O volume mixing ratio [1]
7484
7485 \note Except for model 'user' the input parameters C and x
7486 are neglected (model dominates over parameters).<br>
7487 Allowed models: 'Rosenkranz', 'CruzPol', 'MPM89', 'MPM87', and 'user'.
7488 See the user guide for detailed explanations.
7489
7490 \remark Reference: P. W. Rosenkranz., Radio Science, 33(4), 919, 1998 and
7491 Radio Science, Vol. 34(4), 1025, 1999.
7492 \author Thomas Kuhn
7493 \date 2001-11-05
7494 */
7495void Standard_H2O_self_continuum (MatrixView pxsec,
7496 const Numeric Cin,
7497 const Numeric xin,
7498 const String& model,
7499 ConstVectorView f_grid,
7500 ConstVectorView abs_p,
7501 ConstVectorView abs_t,
7502 ConstVectorView vmr,
7503 const Verbosity& verbosity)
7504{
7505 CREATE_OUT3ArtsOut3 out3(verbosity);
7506
7507 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
7508 // standard values for the Rosenkranz model (Radio Science, 33(4), 919, 1998):
7509 const Numeric Cs_PWR = 1.796e-33; // [1/m / (Hz²*Pa²)]
7510 const Numeric xs_PWR = 4.5; // [1]
7511 // standard values for the Cruz-Pol model (Radio Science, 33(5), 1319, 1998):
7512 const Numeric Cs_CP = 1.851e-33; // [1/m / (Hz²*Pa²)]
7513 const Numeric xs_CP = 7.5; // [1]
7514 // standard values for the MPM89 model (Int. J. Inf. and Millim. Waves, 10(6), 1989, 631):
7515 const Numeric Cs_MPM89 = 1.500e-33; // [1/m / (Hz²*Pa²)]
7516 const Numeric xs_MPM89 = 7.5; // [1]
7517 // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
7518 const Numeric Cs_MPM87 = 1.500e-33; // [1/m / (Hz²*Pa²)]
7519 const Numeric xs_MPM87 = 7.5; // [1]
7520 // ---------------------------------------------------------------------------------------
7521
7522 // select the parameter set (!!model goes for values!!):
7523 Numeric C, x;
7524 if ( model == "Rosenkranz" )
7525 {
7526 C = Cs_PWR;
7527 x = xs_PWR;
7528 }
7529 else if ( model == "CruzPol" )
7530 {
7531 C = Cs_CP;
7532 x = xs_CP;
7533 }
7534 else if ( model == "MPM89" )
7535 {
7536 C = Cs_MPM89;
7537 x = xs_MPM89;
7538 }
7539 else if ( model == "MPM87" )
7540 {
7541 C = Cs_MPM87;
7542 x = xs_MPM87;
7543 }
7544 else if ( model == "user" )
7545 {
7546 C = Cin;
7547 x = xin;
7548 }
7549 else
7550 {
7551 ostringstream os;
7552 os << "H2O-SelfContStandardType: ERROR! Wrong model values given.\n"
7553 << "allowed models are: 'Rosenkranz', 'CruzPol', 'MPM89', 'MPM87', 'user'" << '\n';
7554 throw runtime_error(os.str());
7555 }
7556 out3 << "H2O-SelfContStandardType: (model=" << model << ") parameter values in use:\n"
7557 << " C_s = " << C << "\n"
7558 << " x_s = " << x << "\n";
7559
7560
7561
7562 const Index n_p = abs_p.nelem(); // Number of pressure levels
7563 const Index n_f = f_grid.nelem(); // Number of frequencies
7564
7565 // Check that dimensions of abs_p, abs_t, and vmr agree:
7566 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7566
, "n_p==abs_t.nelem()") : (void)0)
;
7567 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7567
, "n_p==vmr.nelem()") : (void)0)
;
7568
7569 // Check that dimensions of pxsec are consistent with n_f
7570 // and n_p. It should be [n_f,n_p]:
7571 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7571
, "n_f==pxsec.nrows()") : (void)0)
;
7572 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7572
, "n_p==pxsec.ncols()") : (void)0)
;
7573
7574 // Loop over pressure/temperature grid:
7575 for ( Index i=0; i<n_p; ++i )
7576 {
7577 // Dummy scalar holds everything except the quadratic frequency dependence.
7578 // The second vmr of H2O will be multiplied at the stage of absorption
7579 // calculation: abs = vmr * pxsec.
7580 Numeric dummy =
7581 C * pow( (Numeric)300./abs_t[i], x+(Numeric)3. )
7582 * pow( abs_p[i], (Numeric)2. ) * vmr[i];
7583
7584 // Loop over frequency grid:
7585 for ( Index s=0; s<n_f; ++s )
7586 {
7587 pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. );
7588 // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
7589 }
7590 }
7591}
7592//
7593// #################################################################################
7594//! Standard_H2O_foreign_continuum
7595/*!
7596 \param[out] pxsec cross section (absorption/volume mixing ratio) of the
7597 H2O-dry air continuum [1/m]
7598 \param Cin constant absorption strength [1/m / (Hz*Pa)²]
7599 \param xin temperature exponent [1]
7600 \param model allows user defined input parameter set
7601 (C and x)<br> or choice of
7602 pre-defined parameters of specific models (see note below).
7603 \param f_grid predefined frequency grid [Hz]
7604 \param abs_t predefined temperature grid [K]
7605 \param abs_p predefined pressure [Pa]
7606 \param vmr H2O volume mixing ratio [1]
7607
7608 \note Except for model 'user' the input parameters C and x
7609 are neglected (model dominates over parameters).<br>
7610 Allowed models: 'Rosenkranz', 'CruzPol', 'MPM89', 'MPM87', and 'user'.
7611 See the user guide for detailed explanations.
7612
7613 \remark Reference: P. W. Rosenkranz., Radio Science, 33(4), 919, 1998 and
7614 Radio Science, Vol. 34(4), 1025, 1999.
7615
7616 \author Thomas Kuhn
7617 \date 2001-08-03
7618 */
7619void Standard_H2O_foreign_continuum (MatrixView pxsec,
7620 const Numeric Cin,
7621 const Numeric xin,
7622 const String& model,
7623 ConstVectorView f_grid,
7624 ConstVectorView abs_p,
7625 ConstVectorView abs_t,
7626 ConstVectorView vmr,
7627 const Verbosity& verbosity)
7628{
7629 CREATE_OUT3ArtsOut3 out3(verbosity);
7630
7631 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
7632 // standard values for the Rosenkranz model (Radio Science, 33(4), 919, 1998):
7633 const Numeric Cf_PWR = 5.43e-35 ; // [1/m / (Hz²*Pa²)]
7634 const Numeric xf_PWR = 0.0; // [1]
7635 // standard values for the Cruz-Pol model (Radio Science, 33(5), 1319, 1998):
7636 const Numeric Cf_CP = 5.85e-35; // [1/m / (Hz²*Pa²)]
7637 const Numeric xf_CP = 0.0; // [1]
7638 // standard values for the MPM89 model (Int. J. Inf. and Millim. Waves, 10(6), 1989, 631):
7639 const Numeric Cf_MPM89 = 4.74e-35; // [1/m / (Hz²*Pa²)]
7640 const Numeric xf_MPM89 = 0.0; // [1]
7641 // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
7642 const Numeric Cf_MPM87 = 4.74e-35; // [1/m / (Hz²*Pa²)]
7643 const Numeric xf_MPM87 = 0.0; // [1]
7644 // ---------------------------------------------------------------------------------------
7645
7646
7647 // select the parameter set (!!model goes for values!!):
7648 Numeric C, x;
7649 if ( model == "Rosenkranz" )
7650 {
7651 C = Cf_PWR;
7652 x = xf_PWR;
7653 }
7654 else if ( model == "CruzPol" )
7655 {
7656 C = Cf_CP;
7657 x = xf_CP;
7658 }
7659 else if ( model == "MPM89" )
7660 {
7661 C = Cf_MPM89;
7662 x = xf_MPM89;
7663 }
7664 else if ( model == "MPM87" )
7665 {
7666 C = Cf_MPM87;
7667 x = xf_MPM87;
7668 }
7669 else if ( model == "user" )
7670 {
7671 C = Cin;
7672 x = xin;
7673 }
7674 else
7675 {
7676 ostringstream os;
7677 os << "H2O-ForeignContStandardType: ERROR! Wrong model values given.\n"
7678 << "allowed models are: 'Rosenkranz', 'CruzPol', 'MPM89', 'MPM87', 'user'" << '\n';
7679 throw runtime_error(os.str());
7680 }
7681 out3 << "H2O-ForeignContStandardType: (model=" << model << ") parameter values in use:\n"
7682 << " C_s = " << C << "\n"
7683 << " x_s = " << x << "\n";
7684
7685 const Index n_p = abs_p.nelem(); // Number of pressure levels
7686 const Index n_f = f_grid.nelem(); // Number of frequencies
7687
7688 // Check that dimensions of abs_p, abs_t, and vmr agree:
7689 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7689
, "n_p==abs_t.nelem()") : (void)0)
;
7690 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7690
, "n_p==vmr.nelem()") : (void)0)
;
7691
7692 // Check that dimensions of pxsec are consistent with n_f
7693 // and n_p. It should be [n_f,n_p]:
7694 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7694
, "n_f==pxsec.nrows()") : (void)0)
;
7695 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7695
, "n_p==pxsec.ncols()") : (void)0)
;
7696
7697 // Loop pressure/temperature:
7698 for ( Index i=0; i<n_p; ++i )
7699 {
7700 // Dry air partial pressure: p_dry := p_tot - p_h2o.
7701 Numeric pdry = abs_p[i] * (1.000e0-vmr[i]);
7702 // Dummy scalar holds everything except the quadratic frequency dependence.
7703 // The vmr of H2O will be multiplied at the stage of absorption
7704 // calculation: abs = vmr * pxsec.
7705 Numeric dummy = C * pow( (Numeric)300./abs_t[i], x+(Numeric)3. )
7706 * abs_p[i] * pdry;
7707
7708 // Loop frequency:
7709 for ( Index s=0; s<n_f; ++s )
7710 {
7711 pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. );
7712 // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
7713 }
7714 }
7715}
7716//
7717//
7718// #################################################################################
7719//! MaTipping_H2O_foreign_continuum
7720/*!
7721 \param[out] pxsec cross section (absorption/volume mixing ratio) of
7722 the H2O-dry air continuum [1/m]
7723 \param Cin constant absorption strength [1/m / (Hz*Pa)²]
7724 \param xin temperature exponent [1]
7725 \param model allows user defined input parameter set
7726 (C and x)<br> or choice of
7727 pre-defined parameters of specific models (see note below).
7728 \param f_grid predefined frequency grid [Hz]
7729 \param abs_p predefined pressure [Pa]
7730 \param abs_t predefined temperature grid [K]
7731 \param vmr H2O volume mixing ratio [1]
7732
7733 \note Except for model 'user' the input parameters C and x
7734 are neglected (model dominates over parameters).<br>
7735 Allowed models: 'MaTipping', and 'user'.
7736 See the user guide for detailed explanations.
7737
7738 \remark Reference: Q. Ma and R. H. Tipping, J. Chem. Phys., 117(23), 10581, 2002.
7739
7740 \author Thomas Kuhn
7741 \date 2002-12-04
7742 */
7743void MaTipping_H2O_foreign_continuum (MatrixView pxsec,
7744 const Numeric Cin,
7745 const Numeric xin,
7746 const String& model,
7747 ConstVectorView f_grid,
7748 ConstVectorView abs_p,
7749 ConstVectorView abs_t,
7750 ConstVectorView vmr,
7751 const Verbosity& verbosity)
7752{
7753 CREATE_OUT3ArtsOut3 out3(verbosity);
7754
7755 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
7756 // standard values for Q. Ma and R. H. Tipping, J. Chem. Phys., 117(23), 10581, 2002:
7757 // the Cf value is originally given in dB/km/kPa^2/GHz^2.0389. the conversion factor is
7758 // then 1.0283E-28 to get arts units. Additionally the Cf value is divided by 1.08 to
7759 // get the Cf for air.
7760 const Numeric Cf_MaTipping = 1.8590e-35; // [1/m / (Hz²*Pa²)]
7761 const Numeric xf_MaTipping = 4.6019; // [1]
7762 // ---------------------------------------------------------------------------------------
7763
7764
7765 // select the parameter set (!!model goes for values!!):
7766 Numeric C, x;
7767 if ( model == "MaTipping" )
7768 {
7769 C = Cf_MaTipping;
7770 x = xf_MaTipping;
7771 }
7772 else if ( model == "user" )
7773 {
7774 C = Cin;
7775 x = xin;
7776 }
7777 else
7778 {
7779 ostringstream os;
7780 os << "H2O-MaTipping_H2O_foreign_continuum: ERROR! Wrong model values given.\n"
7781 << "allowed models are: 'MaTipping', 'user'" << '\n';
7782 throw runtime_error(os.str());
7783 }
7784 out3 << "H2O-MaTipping_H2O_foreign_continuum: (model=" << model << ") parameter values in use:\n"
7785 << " C_s = " << C << "\n"
7786 << " x_s = " << x << "\n";
7787
7788 const Index n_p = abs_p.nelem(); // Number of pressure levels
7789 const Index n_f = f_grid.nelem(); // Number of frequencies
7790
7791 // Check that dimensions of abs_p, abs_t, and vmr agree:
7792 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7792
, "n_p==abs_t.nelem()") : (void)0)
;
7793 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7793
, "n_p==vmr.nelem()") : (void)0)
;
7794
7795 // Check that dimensions of pxsec are consistent with n_f
7796 // and n_p. It should be [n_f,n_p]:
7797 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7797
, "n_f==pxsec.nrows()") : (void)0)
;
7798 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 7798
, "n_p==pxsec.ncols()") : (void)0)
;
7799
7800 // Loop pressure/temperature:
7801 for ( Index i=0; i<n_p; ++i )
7802 {
7803 // Dry air partial pressure: p_dry := p_tot - p_h2o.
7804 Numeric pdry = abs_p[i] * (1.000e0-vmr[i]);
7805 // Dummy scalar holds everything except the quadratic frequency dependence.
7806 // The vmr of H2O will be multiplied at the stage of absorption
7807 // calculation: abs = vmr * pxsec.
7808 Numeric dummy = C * pow( (Numeric)300./abs_t[i], x )
7809 * abs_p[i] * pdry;
7810
7811 // Loop frequency:
7812 for ( Index s=0; s<n_f; ++s )
7813 {
7814 pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2.0389 );
7815 // cout << "pxsec(" << s << "," << i << "): " << pxsec(s,i) << "\n";
7816 }
7817 }
7818}
7819//
7820// #################################################################################
7821
7822
7823
7824// =================================================================================
7825
7826
7827Numeric XINT_FUN( const Numeric V1A,
7828 const Numeric /* V2A */,
7829 const Numeric DVA,
7830 ConstVectorView A,
7831 const Numeric VI)
7832{
7833
7834// ----------------------------------------------------------------------
7835 // THIS SUBROUTINE INTERPOLATES THE A ARRAY STORED
7836 // FROM V1A TO V2A IN INCREMENTS OF DVA INTO XINT
7837// ----------------------------------------------------------------------
7838
7839 const Numeric ONEPL = 1.001; // original value given in F77 code
7840 // FIXME const Numeric ONEMI = 0.999; // original value given in F77 code
7841
7842 //const Numeric ONEPL = 0.001; // modified value for C/C++ code
7843
7844 Numeric RECDVA = 1.00e0/DVA;
7845
7846 int J = (int) ((VI-V1A)*RECDVA + ONEPL) ;
7847 Numeric VJ = V1A + DVA * (Numeric)(J-1);
7848 Numeric P = RECDVA * (VI-VJ);
7849 Numeric C = (3.00e0-2.00e0*P) * P * P;
7850 Numeric B = 0.500e0 * P * (1.00e0-P);
7851 Numeric B1 = B * (1.00e0-P);
7852 Numeric B2 = B * P;
7853
7854 Numeric xint = 0.;
7855 if (J-1 > 0 && J+2 < A.nelem())
7856 {
7857 xint = -A[J-1] * B1 +
7858 A[J] * (1.00e0-C+B2) +
7859 A[J+1] * (C+B1) -
7860 A[J+2] * B2;
7861 }
7862
7863 /*
7864 cout << (J-1) << " <-> " << (J+2)
7865 << ", V=" << VI << ", VJ=" << VJ << "\n";
7866 cout << "xint=" << xint << " " << A[J-1] << " " << A[J] << " " << A[J+1] << " " << A[J+2] << "\n";
7867 */
7868
7869 return xint;
7870}
7871
7872Numeric XINT_FUN( const Numeric V1A,
7873 const Numeric /* V2A */,
7874 const Numeric DVA,
7875 const Numeric A[],
7876 const Index nA,
7877 const Numeric VI)
7878{
7879
7880// ----------------------------------------------------------------------
7881 // THIS SUBROUTINE INTERPOLATES THE A ARRAY STORED
7882 // FROM V1A TO V2A IN INCREMENTS OF DVA INTO XINT
7883// ----------------------------------------------------------------------
7884
7885 const Numeric ONEPL = 1.001; // original value given in F77 code
7886 // FIXME const Numeric ONEMI = 0.999; // original value given in F77 code
7887
7888 //const Numeric ONEPL = 0.001; // modified value for C/C++ code
7889
7890 Numeric RECDVA = 1.00e0/DVA;
7891
7892 int J = (int) ((VI-V1A)*RECDVA + ONEPL) ;
7893 Numeric VJ = V1A + DVA * (Numeric)(J-1);
7894 Numeric P = RECDVA * (VI-VJ);
7895 Numeric C = (3.00e0-2.00e0*P) * P * P;
7896 Numeric B = 0.500e0 * P * (1.00e0-P);
7897 Numeric B1 = B * (1.00e0-P);
7898 Numeric B2 = B * P;
7899
7900 Numeric xint = 0.;
7901 if (J-1 > 0 && J+2 < nA)
7902 {
7903 xint = -A[J-1] * B1 +
7904 A[J] * (1.00e0-C+B2) +
7905 A[J+1] * (C+B1) -
7906 A[J+2] * B2;
7907 }
7908
7909 /*
7910 cout << (J-1) << " <-> " << (J+2)
7911 << ", V=" << VI << ", VJ=" << VJ << "\n";
7912 cout << "xint=" << xint << " " << A[J-1] << " " << A[J] << " " << A[J+1] << " " << A[J+2] << "\n";
7913 */
7914
7915 return xint;
7916}
7917
7918// =================================================================================
7919
7920Numeric RADFN_FUN (const Numeric VI,
7921 const Numeric XKT)
7922{
7923// ---------------------------------------------------------------------- B18060
7924// LAST MODIFICATION: 12 AUGUST 1991 B17940
7925// B17950
7926// IMPLEMENTATION: R.D. WORSHAM B17960
7927// B17970
7928// ALGORITHM REVISIONS: S.A. CLOUGH B17980
7929// R.D. WORSHAM B17990
7930// J.L. MONCET B18000
7931// B18010
7932// B18020
7933// ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC. B18030
7934// 840 MEMORIAL DRIVE, CAMBRIDGE, MA 02139 B18040
7935// B18050
7936// B18070
7937// WORK SUPPORTED BY: THE ARM PROGRAM B18080
7938// OFFICE OF ENERGY RESEARCH B18090
7939// DEPARTMENT OF ENERGY B18100
7940// B18110
7941// B18120
7942// SOURCE OF ORIGINAL ROUTINE: AFGL LINE-BY-LINE MODEL B18130
7943// B18140
7944// FASCOD3 B18150
7945// B18160
7946// ---------------------------------------------------------------------- B18060
7947// B18170
7948// IN THE SMALL XVIOKT REGION 0.5 IS REQUIRED
7949
7950 Numeric XVI = VI;
7951 Numeric RADFN = 0.00e0;
7952
7953 if (XKT > 0.0)
7954 {
7955 Numeric XVIOKT = XVI/XKT;
7956
7957 if (XVIOKT <= 0.01e0)
7958 {
7959 RADFN = 0.500e0 * XVIOKT * XVI;
7960 }
7961 else if (XVIOKT <= 10.0e0)
7962 {
7963 Numeric EXPVKT = exp(-XVIOKT);
7964 RADFN = XVI * (1.00e0-EXPVKT) / (1.00e0+EXPVKT);
7965 }
7966 else
7967 {
7968 RADFN = XVI;
7969 }
7970 }
7971 else
7972 {
7973 RADFN = XVI;
7974 }
7975
7976 return RADFN;
7977}
7978
7979// =================================================================================
7980
7981//! CKD version 2.2.2 H2O self continuum absorption model
7982/*!
7983 \param[out] pxsec cross section (absorption/volume mixing ratio) of
7984 H2O self continuum according to CKD_2_2_2 [1/m]
7985 \param Cin strength scaling factor [1]
7986 \param model allows user defined input parameter set
7987 (Cin)<br>
7988 or choice of
7989 pre-defined parameters of specific models (see note below).
7990 \param f_grid predefined frequency grid [Hz]
7991 \param abs_p predefined pressure grid [Pa]
7992 \param abs_t predefined temperature grid [K]
7993 \param vmr H2O volume mixing ratio profile [1]
7994
7995 \note This absorption model is taken from the FORTRAN77 code of
7996 CKD version 2.2.2 written by<br>
7997 Atmospheric and Environmental Research Inc. (AER),<br>
7998 Radiation and Climate Group<br>
7999 131 Hartwell Avenue<br>
8000 Lexington, MA 02421, USA<br>
8001 http://www.rtweb.aer.com/continuum_frame.html
8002
8003 \author Thomas Kuhn
8004 \date 2002-31-10
8005*/
8006void CKD_222_self_h2o (MatrixView pxsec,
8007 const Numeric Cin,
8008 const String& model,
8009 ConstVectorView f_grid,
8010 ConstVectorView abs_p,
8011 ConstVectorView abs_t,
8012 ConstVectorView vmr,
8013 const Verbosity& verbosity)
8014{
8015 CREATE_OUT3ArtsOut3 out3(verbosity);
8016
8017 // check the model name about consistency
8018 if ((model != "user") && (model != "CKD222"))
8019 {
8020 ostringstream os;
8021 os << "!!ERROR!!\n"
8022 << "CKDv2.2.2 H2O self continuum:\n"
8023 << "INPUT model name is: " << model << ".\n"
8024 << "VALID model names are user and CKD222\n";
8025 throw runtime_error(os.str());
8026 }
8027
8028
8029 // scaling factor of the self H2O cont. absorption
8030 Numeric ScalingFac = 1.0000e0;
8031 if ( model == "user" )
8032 {
8033 ScalingFac = Cin; // input scaling factor of calculated absorption
8034 }
8035
8036
8037 const Index n_p = abs_p.nelem(); // Number of pressure levels
8038 const Index n_f = f_grid.nelem(); // Number of frequencies
8039
8040
8041 // Check that dimensions of abs_p, abs_t, and vmr agree:
8042 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8042
, "n_p==abs_t.nelem()") : (void)0)
;
8043 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8043
, "n_p==vmr.nelem()") : (void)0)
;
8044
8045 // Check that dimensions of pxsec are consistent with n_f
8046 // and n_p. It should be [n_f,n_p]:
8047 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8047
, "n_f==pxsec.nrows()") : (void)0)
;
8048 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8048
, "n_p==pxsec.ncols()") : (void)0)
;
8049
8050
8051 // ************************** CKD stuff ************************************
8052
8053 const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
8054 // FIXME const Numeric T1 = 273.0e0;
8055 const Numeric TO = 296.0e0;
8056 const Numeric PO = 1013.0e0;
8057
8058 // CKD2.2.2 specific self continuum correction function parameters
8059 const Numeric ALPHA2 = 200.000 * 200.000;
8060 const Numeric ALPHS2 = 120.000 * 120.000;
8061 const Numeric BETAS = 5.000e-06;
8062 const Numeric V0S = 1310.000;
8063 const Numeric FACTRS = 0.150;
8064
8065 // These are self-continuum modification factors from 700-1200 cm-1
8066 const Numeric XFAC[51] = {
8067 1.00000,1.01792,1.03767,1.05749,1.07730,1.09708,
8068 1.10489,1.11268,1.12047,1.12822,1.13597,1.14367,
8069 1.15135,1.15904,1.16669,1.17431,1.18786,1.20134,
8070 1.21479,1.22821,1.24158,1.26580,1.28991,1.28295,
8071 1.27600,1.26896,1.25550,1.24213,1.22879,1.21560,
8072 1.20230,1.18162,1.16112,1.14063,1.12016,1.10195,
8073 1.09207,1.08622,1.08105,1.07765,1.07398,1.06620,
8074 1.05791,1.04905,1.03976,1.02981,1.00985,1.00000,
8075 1.00000,1.00000,1.00000};
8076
8077 // wavenumber range where CKD H2O self continuum is valid
8078 const Numeric VABS_min = SL260_ckd_0_v1; // [cm^-1]
8079 const Numeric VABS_max = SL260_ckd_0_v2; // [cm^-1]
8080
8081
8082 // It is assumed here that f_grid is monotonically increasing with index!
8083 // In future change this return into a change of the loop over
8084 // the frequency f_grid. n_f_new < n_f
8085 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8086 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8087 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8088 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8089 {
8090 out3 << "WARNING:\n"
8091 << " CKD2.2.2 H2O self continuum:\n"
8092 << " input frequency vector exceeds range of model validity\n"
8093 << " " << SL296_ckd_0_v1 << "<->" << SL296_ckd_0_v2 << "cm^-1\n";
8094 }
8095
8096
8097 // ------------------- subroutine SL296/SL260 ----------------------------
8098
8099 if (SL296_ckd_0_v1 != SL260_ckd_0_v1)
8100 {
8101 ostringstream os;
8102 os << "!!ERROR!!\n"
8103 << "CKD2.2.2 H2O self continuum:\n"
8104 << "parameter V1 not the same for different ref. temperatures.\n";
8105 throw runtime_error(os.str());
8106 }
8107 if (SL296_ckd_0_v2 != SL260_ckd_0_v2)
8108 {
8109 ostringstream os;
8110 os << "!!ERROR!!\n"
8111 << "CKD2.2.2 H2O self continuum:\n"
8112 << "parameter V2 not the same for different ref. temperatures.\n";
8113 throw runtime_error(os.str());
8114 }
8115 if (SL296_ckd_0_dv != SL260_ckd_0_dv)
8116 {
8117 ostringstream os;
8118 os << "!!ERROR!!\n"
8119 << "CKD2.2.2 H2O self continuum:\n"
8120 << "parameter DV not the same for different ref. temperatures.\n";
8121 throw runtime_error(os.str());
8122 }
8123 if (SL296_ckd_0_npt != SL260_ckd_0_npt)
8124 {
8125 ostringstream os;
8126 os << "!!ERROR!!\n"
8127 << "CKD2.2.2 H2O self continuum:\n"
8128 << "parameter NPT not the same for different ref. temperatures.\n";
8129 throw runtime_error(os.str());
8130 }
8131
8132 // retrieve the appropriate array sequence of the self continuum
8133 // arrays of the CKD model.
8134 Numeric DVC = SL296_ckd_0_dv;
8135 Numeric V1C = V1ABS - DVC;
8136 Numeric V2C = V2ABS + DVC;
8137
8138 int I1 = (int) ((V1C-SL296_ckd_0_v1) / SL296_ckd_0_dv);
8139 if (V1C < SL296_ckd_0_v1) I1 = -1;
8140 V1C = SL296_ckd_0_v1 + (SL296_ckd_0_dv * (Numeric)I1);
8141
8142 int I2 = (int) ((V2C-SL296_ckd_0_v1) / SL296_ckd_0_dv);
8143
8144 int NPTC = I2-I1+3;
8145 if (NPTC > SL296_ckd_0_npt) NPTC = SL296_ckd_0_npt+1;
8146
8147 V2C = V1C + SL296_ckd_0_dv * (Numeric)(NPTC-1);
8148
8149 if (NPTC < 1)
8150 {
8151 out3 << "WARNING:\n"
8152 << " CKD2.2.2 H2O self continuum:\n"
8153 << " no elements of internal continuum coefficients could be found for the\n"
8154 << " input frequency range.\n"
8155 << " Leave the function without calculating the absorption.";
8156 return;
8157 }
8158
8159 Numeric SH2OT0[NPTC+addF77fields]; // [cm^3/molecules]
8160 Numeric SH2OT1[NPTC+addF77fields]; // [cm^3/molecules]
8161
8162 for (Index J = 1 ; J <= NPTC ; ++J)
8163 {
8164 Index I = I1+J;
8165 if ( (I < 1) || (I > SL296_ckd_0_npt) )
8166 {
8167 SH2OT0[J] = 0.0e0; // at T=296 K
8168 SH2OT1[J] = 0.0e0; // at T=260 K
8169 }
8170 else
8171 {
8172 SH2OT0[J] = SL296_ckd_0[I]; // at T=296 K
8173 SH2OT1[J] = SL260_ckd_0[I]; // at T=260 K
8174 }
8175 }
8176
8177 // ------------------- subroutine SL296/SL260 ----------------------------
8178
8179 Numeric SFAC = 1.00e0;
8180 Numeric VS2 = 0.00e0;
8181 // FIXME Numeric VS4 = 0.00e0;
8182
8183 // Loop pressure/temperature:
8184 for ( Index i = 0 ; i < n_p ; ++i )
8185 {
8186
8187 // atmospheric state parameters
8188 Numeric Tave = abs_t[i]; // [K]
8189 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
8190 Numeric Patm = Pave/PO; // [1]
8191 Numeric vmrh2o = vmr[i]; // [1]
8192 // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
8193 // second vmr in abs_coefCalc multiplied
8194 Numeric Rh2o = Patm * (TO/Tave); // [1]
8195 Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
8196 Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
8197 Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8198 Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
8199
8200 // Molecular cross section calculated by CKD.
8201 // The cross sectionis calculated on the predefined
8202 // CKD wavenumber grid.
8203 Numeric k[NPTC+addF77fields]; // [1/cm]
8204 k[0] = 0.00e0; // not used array field
8205 for (Index J = 1 ; J <= NPTC ; ++J)
8206 {
8207 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
8208 Numeric SH2O = 0.0e0;
8209 if (SH2OT0[J] > 0.0e0)
8210 {
8211 SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
8212 SFAC = 1.00e0;
8213
8214 if ( (VJ >= 700.0e0) && (VJ <= 1200.0e0) )
8215 {
8216 int JFAC = (int)((VJ - 700.0e0)/10.0e0 + 0.00001e0);
8217 if ( (JFAC >= 0) && (JFAC <= 50) )
8218 SFAC = XFAC[JFAC];
8219 }
8220
8221 // ---------------------------------------------------------
8222 // Correction to self continuum (1 SEPT 85); factor of
8223 // 0.78 at 1000 and .......
8224
8225 VS2 = (VJ-V0S) * (VJ-V0S);
8226
8227 SFAC = SFAC *
8228 ( 1.000e0 + 0.3000e0 * (1.000e4 / ((VJ*VJ) + 1.000e4)) ) *
8229 ( 1.000e0 - 0.2333e0 * (ALPHA2 / ((VJ-1050.000e0)*(VJ-1050.000e0) + ALPHA2)) ) *
8230 ( 1.000e0 - FACTRS * (ALPHS2 / (VS2+(BETAS*VS2*VS2)+ALPHS2)) );
8231
8232 SH2O = SFAC * SH2O;
8233 }
8234
8235 // CKD cross section with radiative field [1/cm]
8236 // the VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
8237 // VMRH2O as multiplicative term
8238 k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT); // [1]
8239
8240 }
8241
8242
8243 // Loop input frequency array. The previously calculated cross section
8244 // has therefore to be interpolated on the input frequencies.
8245 for ( Index s = 0 ; s < n_f ; ++s )
8246 {
8247 // calculate the associated wave number (= 1/wavelength)
8248 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8249 if ( (V >= 0.000e0) && (V < SL296_ckd_0_v2) )
8250 {
8251 // arts cross section [1/m]
8252 // interpolate the k vector on the f_grid grid
8253 // The factor 100 comes from the conversion from 1/cm to 1/m for
8254 // the absorption coefficient
8255 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,
8256 NPTC+addF77fields,V);
8257 }
8258 }
8259 }
8260
8261}
8262
8263
8264
8265// =================================================================================
8266
8267//! CKD version 2.2.2 H2O foreign continuum absorption model
8268/*!
8269 \param[out] pxsec cross section (absorption/volume mixing ratio) of
8270 H2O foreign continuum according to CKDv.2.2.2 [1/m]
8271 \param Cin strength scaling factor [1]
8272 \param model allows user defined input parameter set
8273 (Cin)<br>
8274 or choice of
8275 pre-defined parameters of specific models (see note below).
8276 \param f_grid predefined frequency grid [Hz]
8277 \param abs_p predefined pressure grid [Pa]
8278 \param abs_t predefined temperature grid [K]
8279 \param vmr H2O volume mixing ratio profile [1]
8280
8281 \note This absorption model is taken from the FORTRAN77 code of
8282 CKD version 2.2.2 written by<br>
8283 Atmospheric and Environmental Research Inc. (AER),<br>
8284 Radiation and Climate Group<br>
8285 131 Hartwell Avenue<br>
8286 Lexington, MA 02421, USA<br>
8287 http://www.rtweb.aer.com/continuum_frame.html
8288
8289 \author Thomas Kuhn
8290 \date 2002-28-08
8291*/
8292void CKD_222_foreign_h2o (MatrixView pxsec,
8293 const Numeric Cin,
8294 const String& model,
8295 ConstVectorView f_grid,
8296 ConstVectorView abs_p,
8297 ConstVectorView abs_t,
8298 ConstVectorView vmr,
8299 const Verbosity& verbosity)
8300{
8301 CREATE_OUT3ArtsOut3 out3(verbosity);
8302
8303 // check the model name about consistency
8304 if ((model != "user") && (model != "CKD222"))
8305 {
8306 ostringstream os;
8307 os << "!!ERROR!!\n"
8308 << "CKDv2.2.2 H2O foreign continuum:\n"
8309 << "INPUT model name is: " << model << ".\n"
8310 << "VALID model names are user and CKD222\n";
8311 throw runtime_error(os.str());
8312 }
8313
8314
8315 // scaling factor of the foreign H2O cont. absorption
8316 Numeric ScalingFac = 1.0000e0;
8317 if ( model == "user" )
8318 {
8319 ScalingFac = Cin; // input scaling factor of calculated absorption
8320 }
8321
8322
8323 const Index n_p = abs_p.nelem(); // Number of pressure levels
8324 const Index n_f = f_grid.nelem(); // Number of frequencies
8325
8326
8327 // Check that dimensions of abs_p, abs_t, and vmr agree:
8328 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8328
, "n_p==abs_t.nelem()") : (void)0)
;
8329 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8329
, "n_p==vmr.nelem()") : (void)0)
;
8330
8331 // Check that dimensions of pxsec are consistent with n_f
8332 // and n_p. It should be [n_f,n_p]:
8333 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8333
, "n_f==pxsec.nrows()") : (void)0)
;
8334 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8334
, "n_p==pxsec.ncols()") : (void)0)
;
8335
8336
8337 // ************************** CKD stuff ************************************
8338
8339 const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
8340 const Numeric T1 = 273.000e0;
8341 const Numeric TO = 296.000e0;
8342 const Numeric PO = 1013.000e0;
8343
8344 // CKD2.2.2 foreign H2O continuum correction function parameters
8345 const Numeric HWSQF = 330.000e0 * 330.000e0;
8346 const Numeric BETAF = 8.000e-11;
8347 const Numeric V0F = 1130.000e0;
8348 const Numeric FACTRF = 0.970e0;
8349
8350 const Numeric V0F2 = 1900.000e0;
8351 const Numeric HWSQF2 = 150.000e0 * 150.000e0;
8352 const Numeric BETA2 = 3.000e-6;
8353
8354 // wavenumber range where CKD H2O foreign continuum is valid
8355 const Numeric VABS_min = FH2O_ckd_0_v1; // [cm^-1]
8356 const Numeric VABS_max = FH2O_ckd_0_v2; // [cm^-1]
8357
8358 // It is assumed here that f_grid is monotonically increasing with index!
8359 // In future change this return into a change of the loop over
8360 // the frequency f_grid. n_f_new < n_f
8361 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8362 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8363 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8364 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8365 {
8366 out3 << "WARNING:\n"
8367 << " CKD2.2.2 H2O foreign continuum:\n"
8368 << " input frequency vector exceeds range of model validity\n"
8369 << " " << FH2O_ckd_0_v1 << "<->" << FH2O_ckd_0_v2 << "cm^-1\n";
8370 }
8371
8372
8373 // ---------------------- subroutine FRN296 ------------------------------
8374
8375 // retrieve the appropriate array sequence of the foreign continuum
8376 // arrays of the CKD model.
8377 Numeric DVC = FH2O_ckd_0_dv;
8378 Numeric V1C = V1ABS - DVC;
8379 Numeric V2C = V2ABS + DVC;
8380
8381 int I1 = (int) ((V1C-FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
8382 if (V1C < FH2O_ckd_0_v1) I1 = -1;
8383 V1C = FH2O_ckd_0_v1 + (FH2O_ckd_0_dv * (Numeric)I1);
8384
8385 int I2 = (int) ((V2C-FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
8386
8387 int NPTC = I2-I1+3;
8388 if (NPTC > FH2O_ckd_0_npt) NPTC = FH2O_ckd_0_npt+1;
8389
8390 V2C = V1C + FH2O_ckd_0_dv * (Numeric)(NPTC-1);
8391
8392 if (NPTC < 1)
8393 {
8394 out3 << "WARNING:\n"
8395 << " CKD2.2.2 H2O foreign continuum:\n"
8396 << " no elements of internal continuum coefficients could be found for the\n"
8397 << " input frequency range.\n"
8398 << " Leave the function without calculating the absorption.";
8399 return;
8400 }
8401
8402 Numeric FH2OT0[NPTC+addF77fields]; // [cm^3/molecules]
8403
8404 for (Index J = 1 ; J <= NPTC ; ++J)
8405 {
8406 Index I = I1+J;
8407 if ( (I < 1) || (I > FH2O_ckd_0_npt) )
8408 {
8409 FH2OT0[J] = 0.0e0;
8410 }
8411 else
8412 {
8413 FH2OT0[J] = FH2O_ckd_0[I];
8414 }
8415 }
8416
8417 // ---------------------- subroutine FRN296 ------------------------------
8418
8419 Numeric VF2 = 0.000e0;
8420 Numeric VF4 = 0.000e0;
8421 Numeric VF6 = 0.000e0;
8422 Numeric FSCAL = 0.000e0;
8423 Numeric FH2O = 0.000e0;
8424
8425 // Loop pressure/temperature:
8426 for ( Index i = 0 ; i < n_p ; ++i )
8427 {
8428
8429 // atmospheric state parameters
8430 Numeric Tave = abs_t[i]; // [K]
8431 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
8432 Numeric vmrh2o = vmr[i]; // [1]
8433 // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
8434 Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
8435 Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
8436 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
8437 // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8438 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
8439
8440 // Molecular cross section calculated by CKD.
8441 // The cross sectionis calculated on the predefined
8442 // CKD wavenumber grid.
8443 Numeric k[NPTC+addF77fields]; // [1/cm]
8444 k[0] = 0.00e0; // not used array field
8445 for (Index J = 1 ; J <= NPTC ; ++J)
8446 {
8447 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
8448
8449 // CORRECTION TO FOREIGN CONTINUUM
8450 VF2 = (VJ-V0F) * (VJ-V0F);
8451 VF6 = VF2 * VF2 * VF2;
8452 FSCAL = (1.000e0 - FACTRF*(HWSQF/(VF2+(BETAF*VF6)+HWSQF)));
8453
8454 VF2 = (VJ-V0F2) * (VJ-V0F2);
8455 VF4 = VF2 * VF2;
8456 FSCAL = FSCAL * (1.000e0 - 0.600e0*(HWSQF2/(VF2 + BETA2*VF4 + HWSQF2)));
8457
8458 FH2O = FH2OT0[J] * FSCAL;
8459
8460 // CKD cross section with radiative field [1/cm]
8461 // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
8462 // as multiplicative term
8463 k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
8464
8465 }
8466
8467
8468 // Loop input frequency array. The previously calculated cross section
8469 // has therefore to be interpolated on the input frequencies.
8470 for ( Index s = 0 ; s < n_f ; ++s )
8471 {
8472 // calculate the associated wave number (= 1/wavelength)
8473 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8474 if ( (V > 0.000e0) && (V < VABS_max) )
8475 {
8476 // arts CKD2.2.2 foreign H2O continuum cross section [1/m]
8477 // interpolate the k vector on the f_grid grid
8478 // The factor 100 comes from the conversion from (1/cm) to (1/m)
8479 // of the abs. coeff.
8480 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,
8481 NPTC+addF77fields,V);
8482 }
8483 }
8484 }
8485
8486}
8487
8488
8489// =================================================================================
8490
8491//! CKD version 2.4.2 H2O self continuum absorption model
8492/*!
8493 \param[out] pxsec cross section (absorption/volume mixing ratio) of
8494 H2O self continuum according to CKD_2_4_2 [1/m]
8495 \param Cin strength scaling factor [1]
8496 \param model allows user defined input parameter set
8497 (Cin)<br>
8498 or choice of
8499 pre-defined parameters of specific models (see note below).
8500 \param f_grid predefined frequency grid [Hz]
8501 \param abs_p predefined pressure grid [Pa]
8502 \param abs_t predefined temperature grid [K]
8503 \param vmr H2O volume mixing ratio profile [1]
8504
8505 \note This absorption model is taken from the FORTRAN77 code of
8506 CKD version 2.4.2 written by<br>
8507 Atmospheric and Environmental Research Inc. (AER),<br>
8508 Radiation and Climate Group<br>
8509 131 Hartwell Avenue<br>
8510 Lexington, MA 02421, USA<br>
8511 http://www.rtweb.aer.com/continuum_frame.html
8512
8513 \author Thomas Kuhn
8514 \date 2002-30-10
8515*/
8516void CKD_242_self_h2o (MatrixView pxsec,
8517 const Numeric Cin,
8518 const String& model,
8519 ConstVectorView f_grid,
8520 ConstVectorView abs_p,
8521 ConstVectorView abs_t,
8522 ConstVectorView vmr,
8523 const Verbosity& verbosity)
8524{
8525 CREATE_OUT3ArtsOut3 out3(verbosity);
8526
8527 // check the model name about consistency
8528 if ((model != "user") && (model != "CKD242"))
8529 {
8530 ostringstream os;
8531 os << "!!ERROR!!\n"
8532 << "CKDv2.4.2 H2O self continuum:\n"
8533 << "INPUT model name is: " << model << ".\n"
8534 << "VALID model names are user and CKD242\n";
8535 throw runtime_error(os.str());
8536 }
8537
8538
8539 // scaling factor of the self H2O cont. absorption
8540 Numeric ScalingFac = 1.0000e0;
8541 if ( model == "user" )
8542 {
8543 ScalingFac = Cin; // input scaling factor of calculated absorption
8544 }
8545
8546
8547 const Index n_p = abs_p.nelem(); // Number of pressure levels
8548 const Index n_f = f_grid.nelem(); // Number of frequencies
8549
8550
8551 // Check that dimensions of abs_p, abs_t, and vmr agree:
8552 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8552
, "n_p==abs_t.nelem()") : (void)0)
;
8553 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8553
, "n_p==vmr.nelem()") : (void)0)
;
8554
8555 // Check that dimensions of pxsec are consistent with n_f
8556 // and n_p. It should be [n_f,n_p]:
8557 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8557
, "n_f==pxsec.nrows()") : (void)0)
;
8558 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8558
, "n_p==pxsec.ncols()") : (void)0)
;
8559
8560
8561 // ************************** CKD stuff ************************************
8562
8563 const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
8564 // FIXME const Numeric T1 = 273.0e0;
8565 const Numeric TO = 296.0e0;
8566 const Numeric PO = 1013.0e0;
8567
8568 // CKD2.4.2 specific correction functions
8569 const Numeric V0S1 = 0.000e+00;
8570 const Numeric HWSQ1 = (1.000e+02 * 1.000e+02);
8571 const Numeric BETAS1 = 1.000e-04;
8572 const Numeric FACTRS1 = 0.688e+00;
8573
8574 const Numeric V0S2 = 1.050e+03;
8575 const Numeric HWSQ2 = (2.000e+02 * 2.000e+02);
8576 const Numeric FACTRS2 = -0.2333e+00;
8577
8578 const Numeric V0S3 = 1.310e+03;
8579 const Numeric HWSQ3 = (1.200e+02 * 1.200e+02);
8580 const Numeric BETAS3 = 5.000e-06;
8581 const Numeric FACTRS3 = -0.150e+00;
8582
8583 const Numeric XFAC[51] = {
8584 1.00000,1.01792,1.03767,1.05749,1.07730,1.09708,
8585 1.10489,1.11268,1.12047,1.12822,1.13597,1.14367,
8586 1.15135,1.15904,1.16669,1.17431,1.18786,1.20134,
8587 1.21479,1.22821,1.24158,1.26580,1.28991,1.28295,
8588 1.27600,1.26896,1.25550,1.24213,1.22879,1.21560,
8589 1.20230,1.18162,1.16112,1.14063,1.12016,1.10195,
8590 1.09207,1.08622,1.08105,1.07765,1.07398,1.06620,
8591 1.05791,1.04905,1.03976,1.02981,1.00985,1.00000,
8592 1.00000,1.00000,1.00000};
8593
8594 // wavenumber range where CKD H2O self continuum is valid
8595 const Numeric VABS_min = SL260_ckd_0_v1; // [cm^-1]
8596 const Numeric VABS_max = SL260_ckd_0_v2; // [cm^-1]
8597
8598
8599 // It is assumed here that f_grid is monotonically increasing with index!
8600 // In future change this return into a change of the loop over
8601 // the frequency f_grid. n_f_new < n_f
8602 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8603 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8604 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8605 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8606 {
8607 out3 << "WARNING:\n"
8608 << " CKD2.4.2 H2O self continuum:\n"
8609 << " input frequency vector exceeds range of model validity\n"
8610 << " " << SL296_ckd_0_v1 << "<->" << SL296_ckd_0_v2 << "cm^-1\n";
8611 }
8612
8613
8614 // ------------------- subroutine SL296/SL260 ----------------------------
8615
8616 if (SL296_ckd_0_v1 != SL260_ckd_0_v1)
8617 {
8618 ostringstream os;
8619 os << "!!ERROR!!\n"
8620 << "CKD2.4.2 H2O self continuum:\n"
8621 << "parameter V1 not the same for different ref. temperatures.\n";
8622 throw runtime_error(os.str());
8623 }
8624 if (SL296_ckd_0_v2 != SL260_ckd_0_v2)
8625 {
8626 ostringstream os;
8627 os << "!!ERROR!!\n"
8628 << "CKD2.4.2 H2O self continuum:\n"
8629 << "parameter V2 not the same for different ref. temperatures.\n";
8630 throw runtime_error(os.str());
8631 }
8632 if (SL296_ckd_0_dv != SL260_ckd_0_dv)
8633 {
8634 ostringstream os;
8635 os << "!!ERROR!!\n"
8636 << "CKD2.4.2 H2O self continuum:\n"
8637 << "parameter DV not the same for different ref. temperatures.\n";
8638 throw runtime_error(os.str());
8639 }
8640 if (SL296_ckd_0_npt != SL260_ckd_0_npt)
8641 {
8642 ostringstream os;
8643 os << "!!ERROR!!\n"
8644 << "CKD2.4.2 H2O self continuum:\n"
8645 << "parameter NPT not the same for different ref. temperatures.\n";
8646 throw runtime_error(os.str());
8647 }
8648
8649 // retrieve the appropriate array sequence of the self continuum
8650 // arrays of the CKD model.
8651 Numeric DVC = SL296_ckd_0_dv;
8652 Numeric V1C = V1ABS - DVC;
8653 Numeric V2C = V2ABS + DVC;
8654
8655 int I1 = (int) ((V1C-SL296_ckd_0_v1) / SL296_ckd_0_dv);
8656 if (V1C < SL296_ckd_0_v1) I1 = -1;
8657 V1C = SL296_ckd_0_v1 + (SL296_ckd_0_dv * (Numeric)I1);
8658
8659 int I2 = (int) ((V2C-SL296_ckd_0_v1) / SL296_ckd_0_dv);
8660
8661 int NPTC = I2-I1+3;
8662 if (NPTC > SL296_ckd_0_npt) NPTC = SL296_ckd_0_npt+1;
8663
8664 V2C = V1C + SL296_ckd_0_dv * (Numeric)(NPTC-1);
8665
8666 if (NPTC < 1)
8667 {
8668 out3 << "WARNING:\n"
8669 << " CKDv2.4.2 H2O self continuum:\n"
8670 << " no elements of internal continuum coefficients could be found for the\n"
8671 << " input frequency range.\n"
8672 << " Leave the function without calculating the absorption.";
8673 return;
8674 }
8675
8676 Numeric SH2OT0[NPTC+addF77fields]; // [cm^3/molecules]
8677 Numeric SH2OT1[NPTC+addF77fields]; // [cm^3/molecules]
8678
8679 for (Index J = 1 ; J <= NPTC ; ++J)
8680 {
8681 Index I = I1+J;
8682 if ( (I < 1) || (I > SL296_ckd_0_npt) )
8683 {
8684 SH2OT0[J] = 0.0e0; // at T=296 K
8685 SH2OT1[J] = 0.0e0; // at T=260 K
8686 }
8687 else
8688 {
8689 SH2OT0[J] = SL296_ckd_0[I]; // at T=296 K
8690 SH2OT1[J] = SL260_ckd_0[I]; // at T=260 K
8691 }
8692 }
8693
8694 // ------------------- subroutine SL296/SL260 ----------------------------
8695
8696 Numeric SFAC = 1.00e0;
8697 Numeric VS2 = 0.00e0;
8698 Numeric VS4 = 0.00e0;
8699
8700 // Loop pressure/temperature:
8701 for ( Index i = 0 ; i < n_p ; ++i )
8702 {
8703
8704 // atmospheric state parameters
8705 Numeric Tave = abs_t[i]; // [K]
8706 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
8707 Numeric Patm = Pave/PO; // [1]
8708 Numeric vmrh2o = vmr[i]; // [1]
8709 // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
8710 // second vmr in abs_coefCalc multiplied
8711 Numeric Rh2o = Patm * (TO/Tave); // [1]
8712 Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
8713 Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
8714 Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8715 Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
8716
8717 // Molecular cross section calculated by CKD.
8718 // The cross sectionis calculated on the predefined
8719 // CKD wavenumber grid.
8720 Numeric k[NPTC+addF77fields]; // [1/cm]
8721 k[0] = 0.00e0; // not used array field
8722 for (Index J = 1 ; J <= NPTC ; ++J)
8723 {
8724 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
8725 Numeric SH2O = 0.0e0;
8726 if (SH2OT0[J] > 0.0e0)
8727 {
8728 SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
8729 SFAC = 1.00e0;
8730
8731 if ( (VJ >= 700.0e0) && (VJ <= 1200.0e0) )
8732 {
8733 int JFAC = (int)((VJ - 700.0e0)/10.0e0 + 0.00001e0);
8734 if ( (JFAC >= 0) && (JFAC <= 50) )
8735 SFAC = XFAC[JFAC];
8736 }
8737
8738 // ---------------------------------------------------------
8739 // Correction to self continuum (1 SEPT 85); factor of
8740 // 0.78 at 1000 and .......
8741
8742 VS2 = (VJ-V0S1) * (VJ-V0S1);
8743 VS4 = VS2*VS2;
8744 SFAC = SFAC *
8745 (1.000e0 + FACTRS1*(HWSQ1/((VJ*VJ)+(BETAS1*VS4)+HWSQ1)));
8746
8747 VS2 = (VJ-V0S2) * (VJ-V0S2);
8748 SFAC = SFAC *
8749 (1.000e0 + FACTRS2*(HWSQ2/(VS2+HWSQ2)));
8750
8751 VS2 = (VJ-V0S3) * (VJ-V0S3);
8752 VS4 = VS2*VS2;
8753 SFAC = SFAC *
8754 (1.000e0 + FACTRS3*(HWSQ3/(VS2+(BETAS3*VS4)+HWSQ3)));
8755
8756 SH2O = SFAC * SH2O;
8757 }
8758
8759 // CKD cross section with radiative field [1/cm]
8760 // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
8761 // VMRH2O as multiplicative term
8762 k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
8763
8764 }
8765
8766
8767 // Loop input frequency array. The previously calculated cross section
8768 // has therefore to be interpolated on the input frequencies.
8769 for ( Index s = 0 ; s < n_f ; ++s )
8770 {
8771 // calculate the associated wave number (= 1/wavelength)
8772 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8773 if ( (V >= 0.000e0) && (V < SL296_ckd_0_v2) )
8774 {
8775 // arts cross section [1/m]
8776 // interpolate the k vector on the f_grid grid
8777 // The factor 100 comes from the conversion from 1/cm to 1/m for
8778 // the absorption coefficient
8779 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,
8780 NPTC+addF77fields,V);
8781 }
8782 }
8783 }
8784
8785}
8786
8787
8788// =================================================================================
8789
8790//! CKD version 2.4.2 H2O foreign continuum absorption model
8791/*!
8792 \param[out] pxsec cross section (absorption/volume mixing ratio) of
8793 H2O foreign continuum according to CKDv.2.4.2 [1/m]
8794 \param Cin strength scaling factor [1]
8795 \param model allows user defined input parameter set
8796 (Cin)<br>
8797 or choice of
8798 pre-defined parameters of specific models (see note below).
8799 \param f_grid predefined frequency grid [Hz]
8800 \param abs_p predefined pressure grid [Pa]
8801 \param abs_t predefined temperature grid [K]
8802 \param vmr H2O volume mixing ratio profile [1]
8803
8804 \note This absorption model is taken from the FORTRAN77 code of
8805 CKD version 2.4.2 written by<br>
8806 Atmospheric and Environmental Research Inc. (AER),<br>
8807 Radiation and Climate Group<br>
8808 131 Hartwell Avenue<br>
8809 Lexington, MA 02421, USA<br>
8810 http://www.rtweb.aer.com/continuum_frame.html
8811
8812 \author Thomas Kuhn
8813 \date 2002-28-08
8814*/
8815void CKD_242_foreign_h2o (MatrixView pxsec,
8816 const Numeric Cin,
8817 const String& model,
8818 ConstVectorView f_grid,
8819 ConstVectorView abs_p,
8820 ConstVectorView abs_t,
8821 ConstVectorView vmr,
8822 const Verbosity& verbosity)
8823{
8824 CREATE_OUT3ArtsOut3 out3(verbosity);
8825
8826 // check the model name about consistency
8827 if ((model != "user") && (model != "CKD242"))
8828 {
8829 ostringstream os;
8830 os << "!!ERROR!!\n"
8831 << "CKDv2.4.2 H2O foreign continuum:\n"
8832 << "INPUT model name is: " << model << ".\n"
8833 << "VALID model names are user and CKD242\n";
8834 throw runtime_error(os.str());
8835 }
8836
8837
8838 // scaling factor of the foreign H2O cont. absorption
8839 Numeric ScalingFac = 1.0000e0;
8840 if ( model == "user" )
8841 {
8842 ScalingFac = Cin; // input scaling factor of calculated absorption
8843 }
8844
8845
8846 const Index n_p = abs_p.nelem(); // Number of pressure levels
8847 const Index n_f = f_grid.nelem(); // Number of frequencies
8848
8849 // Check that dimensions of abs_p, abs_t, and vmr agree:
8850 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8850
, "n_p==abs_t.nelem()") : (void)0)
;
8851 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8851
, "n_p==vmr.nelem()") : (void)0)
;
8852
8853 // Check that dimensions of pxsec are consistent with n_f
8854 // and n_p. It should be [n_f,n_p]:
8855 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8855
, "n_f==pxsec.nrows()") : (void)0)
;
8856 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 8856
, "n_p==pxsec.ncols()") : (void)0)
;
8857
8858
8859 // ************************** CKD stuff ************************************
8860
8861 const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
8862 const Numeric T1 = 273.0e0;
8863 const Numeric TO = 296.0e0;
8864 const Numeric PO = 1013.0e0;
8865
8866 // CKD2.4.2 foreign H2O continuum correction function parameters
8867 const Numeric V0F1 = 350.000e0;
8868 const Numeric HWSQF1 = 200.000e0 * 200.000e0;
8869 const Numeric BETAF1 = 5.000e-9 ;
8870 const Numeric FACTRF1 = -0.700e0;
8871
8872 const Numeric V0F1a = 630.000e0;
8873 const Numeric HWSQF1a = 65.000e0*65.000e0;
8874 const Numeric BETAF1a = 2.000e-08 ;
8875 const Numeric FACTRF1a = 0.750e0;
8876
8877 const Numeric V0F2 = 1130.000e0;
8878 const Numeric HWSQF2 = 330.000e0 * 330.000e0;
8879 const Numeric BETAF2 = 8.000e-11;
8880 const Numeric FACTRF2 = -0.970e0;
8881
8882 const Numeric V0F3 = 1975.000e0;
8883 const Numeric HWSQF3 = 250.000e0 * 250.000e0;
8884 const Numeric BETAF3 = 5.000e-06;
8885 const Numeric FACTRF3 = -0.650e0;
8886
8887 // wavenumber range where CKD H2O foreign continuum is valid
8888 const Numeric VABS_min = FH2O_ckd_0_v1; // [cm^-1]
8889 const Numeric VABS_max = FH2O_ckd_0_v2; // [cm^-1]
8890
8891
8892 // It is assumed here that f_grid is monotonically increasing with index!
8893 // In future change this return into a change of the loop over
8894 // the frequency f_grid. n_f_new < n_f
8895 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8896 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
8897 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
8898 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
8899 {
8900 out3 << "WARNING:\n"
8901 << " CKDv2.4.2 H2O foreign continuum:\n"
8902 << " input frequency vector exceeds range of model validity\n"
8903 << " " << FH2O_ckd_0_v1 << "<->" << FH2O_ckd_0_v2 << "cm^-1\n";
8904 }
8905
8906
8907 // ---------------------- subroutine FRN296 ------------------------------
8908
8909 // retrieve the appropriate array sequence of the foreign continuum
8910 // arrays of the CKD model.
8911 Numeric DVC = FH2O_ckd_0_dv;
8912 Numeric V1C = V1ABS - DVC;
8913 Numeric V2C = V2ABS + DVC;
8914
8915 int I1 = (int) ((V1C-FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
8916 if (V1C < FH2O_ckd_0_v1) I1 = -1;
8917 V1C = FH2O_ckd_0_v1 + (FH2O_ckd_0_dv * (Numeric)I1);
8918
8919 int I2 = (int) ((V2C-FH2O_ckd_0_v1) / FH2O_ckd_0_dv);
8920
8921 int NPTC = I2-I1+3;
8922 if (NPTC > FH2O_ckd_0_npt) NPTC = FH2O_ckd_0_npt+1;
8923
8924 V2C = V1C + FH2O_ckd_0_dv * (Numeric)(NPTC-1);
8925
8926 if (NPTC < 1)
8927 {
8928 out3 << "WARNING:\n"
8929 << " CKDv2.4.2 H2O foreign continuum:\n"
8930 << " no elements of internal continuum coefficients could be found for the\n"
8931 << " input frequency range.\n"
8932 << " Leave the function without calculating the absorption.";
8933 return;
8934 }
8935
8936 Numeric FH2OT0[NPTC+addF77fields]; // [cm^3/molecules]
8937
8938 for (Index J = 1 ; J <= NPTC ; ++J)
8939 {
8940 Index I = I1+J;
8941 if ( (I < 1) || (I > FH2O_ckd_0_npt) )
8942 {
8943 FH2OT0[J] = 0.0e0;
8944 }
8945 else
8946 {
8947 FH2OT0[J] = FH2O_ckd_0[I];
8948 }
8949 }
8950
8951 // ---------------------- subroutine FRN296 ------------------------------
8952
8953 Numeric VF2 = 0.000e0;
8954 Numeric VF4 = 0.000e0;
8955 Numeric VF6 = 0.000e0;
8956 Numeric FSCAL = 0.000e0;
8957 Numeric FH2O = 0.000e0;
8958
8959 // Loop pressure/temperature:
8960 for ( Index i = 0 ; i < n_p ; ++i )
8961 {
8962
8963 // atmospheric state parameters
8964 Numeric Tave = abs_t[i]; // [K]
8965 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
8966 Numeric vmrh2o = vmr[i]; // [1]
8967 // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
8968 Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
8969 Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
8970 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
8971 // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
8972 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
8973
8974 // Molecular cross section calculated by CKD.
8975 // The cross sectionis calculated on the predefined
8976 // CKD wavenumber grid.
8977 Numeric k[NPTC+addF77fields]; // [1/cm]
8978 k[0] = 0.00e0; // not used array field
8979 for (Index J = 1 ; J <= NPTC ; ++J)
8980 {
8981 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
8982
8983 // CORRECTION TO FOREIGN CONTINUUM
8984 VF2 = (VJ-V0F1) * (VJ-V0F1);
8985 VF6 = VF2 * VF2 * VF2;
8986 FSCAL = (1.000e0 + FACTRF1*(HWSQF1/(VF2+(BETAF1*VF6)+HWSQF1)));
8987
8988 VF2 = (VJ-V0F1a) * (VJ-V0F1a);
8989 VF6 = VF2 * VF2 * VF2;
8990 FSCAL = FSCAL *
8991 (1.000e0 + FACTRF1a*(HWSQF1a/(VF2+(BETAF1a*VF6)+HWSQF1a)));
8992
8993 VF2 = (VJ-V0F2) * (VJ-V0F2);
8994 VF6 = VF2 * VF2 * VF2;
8995 FSCAL = FSCAL *
8996 (1.000e0 + FACTRF2*(HWSQF2/(VF2+(BETAF2*VF6)+HWSQF2)));
8997
8998 VF2 = (VJ-V0F3) * (VJ-V0F3);
8999 VF4 = VF2 * VF2;
9000 FSCAL = FSCAL *
9001 (1.000e0 + FACTRF3*(HWSQF3/(VF2+BETAF3*VF4+HWSQF3)));
9002
9003 FH2O = FH2OT0[J] * FSCAL;
9004
9005 // CKD cross section without radiative field
9006 // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
9007 // as multiplicative term
9008 k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
9009
9010 }
9011
9012
9013 // Loop input frequency array. The previously calculated cross section
9014 // has therefore to be interpolated on the input frequencies.
9015 for ( Index s = 0 ; s < n_f ; ++s )
9016 {
9017 // calculate the associated wave number (= 1/wavelength)
9018 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9019 if ( (V >= 0.000e0) && (V < VABS_max) )
9020 {
9021 // arts CKD2.4.2 foreign H2O continuum cross section [1/m]
9022 // interpolate the k vector on the f_grid grid
9023 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,
9024 NPTC+addF77fields,V);
9025 }
9026 }
9027 }
9028
9029}
9030
9031// =================================================================================
9032
9033//! CKD version MT 1.00 H2O self continuum absorption model
9034/*!
9035 \param[out] pxsec cross section (absorption/volume mixing ratio) of
9036 H2O self continuum according to CKD_MT 1.00 [1/m]
9037 \param Cin strength scaling factor [1]
9038 \param model allows user defined input parameter set
9039 (Cin)<br>
9040 or choice of
9041 pre-defined parameters of specific models (see note below).
9042 \param f_grid predefined frequency grid [Hz]
9043 \param abs_p predefined pressure grid [Pa]
9044 \param abs_t predefined temperature grid [K]
9045 \param vmr H2O volume mixing ratio profile [1]
9046
9047 \note This absorption model is taken from the FORTRAN77 code of
9048 CKD_MT version 1.00 written by<br>
9049 Atmospheric and Environmental Research Inc. (AER),<br>
9050 Radiation and Climate Group<br>
9051 131 Hartwell Avenue<br>
9052 Lexington, MA 02421, USA<br>
9053 http://www.rtweb.aer.com/continuum_frame.html
9054
9055 \author Thomas Kuhn
9056 \date 2002-28-08
9057*/
9058void CKD_mt_100_self_h2o (MatrixView pxsec,
9059 const Numeric Cin,
9060 const String& model,
9061 ConstVectorView f_grid,
9062 ConstVectorView abs_p,
9063 ConstVectorView abs_t,
9064 ConstVectorView vmr,
9065 const Verbosity& verbosity)
9066{
9067 CREATE_OUT3ArtsOut3 out3(verbosity);
9068
9069 // check the model name about consistency
9070 if ((model != "user") && (model != "CKDMT100"))
9071 {
9072 ostringstream os;
9073 os << "!!ERROR!!\n"
9074 << "CKD_MT1.00 H2O self continuum:\n"
9075 << "INPUT model name is: " << model << ".\n"
9076 << "VALID model names are user and CKDMT100\n";
9077 throw runtime_error(os.str());
9078 }
9079
9080
9081 // scaling factor of the self H2O cont. absorption
9082 Numeric ScalingFac = 1.0000e0;
9083 if ( model == "user" )
9084 {
9085 ScalingFac = Cin; // input scaling factor of calculated absorption
9086 }
9087
9088
9089 const Index n_p = abs_p.nelem(); // Number of pressure levels
9090 const Index n_f = f_grid.nelem(); // Number of frequencies
9091
9092
9093 // Check that dimensions of abs_p, abs_t, and vmr agree:
9094 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9094
, "n_p==abs_t.nelem()") : (void)0)
;
9095 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9095
, "n_p==vmr.nelem()") : (void)0)
;
9096
9097 // Check that dimensions of pxsec are consistent with n_f
9098 // and n_p. It should be [n_f,n_p]:
9099 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9099
, "n_f==pxsec.nrows()") : (void)0)
;
9100 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9100
, "n_p==pxsec.ncols()") : (void)0)
;
9101
9102
9103 // ************************** CKD stuff ************************************
9104
9105 const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
9106 // FIXME const Numeric T1 = 273.000e0; // [K]
9107 const Numeric TO = 296.000e0; // [K]
9108 const Numeric PO = 1013.000e0; // [hPa]
9109
9110 const Numeric XFACREV[15] =
9111 {1.003, 1.009, 1.015, 1.023, 1.029,1.033,
9112 1.037, 1.039, 1.040, 1.046, 1.036,1.027,
9113 1.01, 1.002, 1.00};
9114
9115 // wavenumber range where CKD H2O self continuum is valid
9116 const Numeric VABS_min = -2.000e1; // [cm^-1]
9117 const Numeric VABS_max = 2.000e4; // [cm^-1]
9118
9119
9120 // It is assumed here that f_grid is monotonically increasing with index!
9121 // In future change this return into a change of the loop over
9122 // the frequency f_grid. n_f_new < n_f
9123 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9124 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9125 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
9126 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
9127 {
9128 out3 << "WARNING:\n"
9129 << " CKD_MT 1.00 H2O self continuum:\n"
9130 << " input frequency vector exceeds range of model validity\n"
9131 << " " << SL296_ckd_mt_100_v1 << "<->" << SL296_ckd_mt_100_v2 << "cm^-1\n";
9132 }
9133
9134
9135 // ------------------- subroutine SL296/SL260 ----------------------------
9136
9137 if (SL296_ckd_mt_100_v1 != SL260_ckd_mt_100_v1)
9138 {
9139 ostringstream os;
9140 os << "!!ERROR!!\n"
9141 << "CKD_MT 1.00 H2O self continuum:\n"
9142 << "parameter V1 not the same for different ref. temperatures.\n";
9143 throw runtime_error(os.str());
9144 }
9145 if (SL296_ckd_mt_100_v2 != SL260_ckd_mt_100_v2)
9146 {
9147 ostringstream os;
9148 os << "!!ERROR!!\n"
9149 << "CKD_MT 1.00 H2O self continuum:\n"
9150 << "parameter V2 not the same for different ref. temperatures.\n";
9151 throw runtime_error(os.str());
9152 }
9153 if (SL296_ckd_mt_100_dv != SL260_ckd_mt_100_dv)
9154 {
9155 ostringstream os;
9156 os << "!!ERROR!!\n"
9157 << "CKD_MT 1.00 H2O self continuum:\n"
9158 << "parameter DV not the same for different ref. temperatures.\n";
9159 throw runtime_error(os.str());
9160 }
9161 if (SL296_ckd_mt_100_npt != SL260_ckd_mt_100_npt)
9162 {
9163 ostringstream os;
9164 os << "!!ERROR!!\n"
9165 << "CKD_MT 1.00 H2O self continuum:\n"
9166 << "parameter NPT not the same for different ref. temperatures.\n";
9167 throw runtime_error(os.str());
9168 }
9169
9170 // retrieve the appropriate array sequence of the self continuum
9171 // arrays of the CKD model.
9172 Numeric DVC = SL296_ckd_mt_100_dv;
9173 Numeric V1C = V1ABS - DVC;
9174 Numeric V2C = V2ABS + DVC;
9175
9176 int I1 = (int) ((V1C-SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
9177 if (V1C < SL296_ckd_mt_100_v1) I1 = -1;
9178 V1C = SL296_ckd_mt_100_v1 + (SL296_ckd_mt_100_dv * (Numeric)I1);
9179
9180 int I2 = (int) ((V2C-SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
9181
9182 int NPTC = I2-I1+3;
9183 if (NPTC > SL296_ckd_mt_100_npt) NPTC = SL296_ckd_mt_100_npt+1;
9184
9185 V2C = V1C + SL296_ckd_mt_100_dv * (Numeric)(NPTC-1);
9186
9187 if (NPTC < 1)
9188 {
9189 out3 << "WARNING:\n"
9190 << " CKD_MT 1.00 H2O self continuum:\n"
9191 << " no elements of internal continuum coefficients could be found for the\n"
9192 << " input frequency range.\n"
9193 << " Leave the function without calculating the absorption.";
9194 return;
9195 }
9196
9197 Vector SH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
9198 Vector SH2OT1(NPTC+addF77fields, 0.); // [cm^3/molecules]
9199
9200 for (Index J = 1 ; J <= NPTC ; ++J)
9201 {
9202 Index I = I1+J;
9203 if ( (I > 0) && (I <= SL296_ckd_mt_100_npt) )
9204 {
9205 SH2OT0[J] = SL296_ckd_mt_100[I]; // at T=296 K
9206 SH2OT1[J] = SL260_ckd_mt_100[I]; // at T=260 K
9207 }
9208 }
9209
9210 // ------------------- subroutine SL296/SL260 ----------------------------
9211
9212 Numeric SFAC = 1.00e0;
9213
9214 // Loop pressure/temperature:
9215 for ( Index i = 0 ; i < n_p ; ++i )
9216 {
9217
9218 // atmospheric state parameters
9219 Numeric Tave = abs_t[i]; // [K]
9220 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
9221 Numeric Patm = Pave/PO; // [1]
9222 Numeric vmrh2o = vmr[i]; // [1]
9223 // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
9224 // second vmr in abs_coefCalc multiplied
9225 Numeric Rh2o = Patm * (TO/Tave); // [1]
9226 Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
9227 Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
9228 Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
9229 Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
9230
9231 // Molecular cross section calculated by CKD.
9232 // The cross sectionis calculated on the predefined
9233 // CKD wavenumber grid.
9234 Vector k(NPTC+addF77fields, 0.); // [1/cm]
9235 for (Index J = 1 ; J <= NPTC ; ++J)
9236 {
9237 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
9238 Numeric SH2O = 0.0e0;
9239 if (SH2OT0[J] > 0.0e0)
9240 {
9241 SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
9242 SFAC = 1.00e0;
9243
9244 if ( (VJ >= 820.0e0) && (VJ <= 960.0e0) )
9245 {
9246 int JFAC = (int)((VJ - 820.0e0)/10.0e0 + 0.00001e0);
9247 if ( (JFAC >= 0) && (JFAC <=14) )
9248 SFAC = XFACREV[JFAC];
9249 }
9250
9251 SH2O = SFAC * SH2O;
9252 }
9253
9254 // CKD cross section with radiative field [1/cm]
9255 // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
9256 // VMRH2O as multiplicative term
9257 k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
9258
9259 }
9260
9261
9262 // Loop input frequency array. The previously calculated cross section
9263 // has therefore to be interpolated on the input frequencies.
9264 for ( Index s = 0 ; s < n_f ; ++s )
9265 {
9266 // calculate the associated wave number (= 1/wavelength)
9267 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9268 if ( (V > 0.000e0) && (V < SL296_ckd_mt_100_v2) )
9269 {
9270 // arts cross section [1/m]
9271 // interpolate the k vector on the f_grid grid
9272 // The factor 100 comes from the conversion from 1/cm to 1/m for
9273 // the absorption coefficient
9274 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
9275 }
9276 }
9277 }
9278
9279}
9280
9281// =================================================================================
9282
9283//! CKD version MT 1.00 H2O foreign continuum absorption model
9284/*!
9285 \param[out] pxsec cross section (absorption/volume mixing ratio) of
9286 H2O foreign continuum according to CKD_MT 1.00 [1/m]
9287 \param Cin strength scaling factor [1]
9288 \param model allows user defined input parameter set
9289 (Cin)<br>
9290 or choice of
9291 pre-defined parameters of specific models (see note below).
9292 \param f_grid predefined frequency grid [Hz]
9293 \param abs_p predefined pressure grid [Pa]
9294 \param abs_t predefined temperature grid [K]
9295 \param vmr H2O volume mixing ratio profile [1]
9296
9297 \note This absorption model is taken from the FORTRAN77 code of
9298 CKD_MT version 1.00 written by<br>
9299 Atmospheric and Environmental Research Inc. (AER),<br>
9300 Radiation and Climate Group<br>
9301 131 Hartwell Avenue<br>
9302 Lexington, MA 02421, USA<br>
9303 http://www.rtweb.aer.com/continuum_frame.html
9304
9305 \author Thomas Kuhn
9306 \date 2002-28-08
9307*/
9308void CKD_mt_100_foreign_h2o (MatrixView pxsec,
9309 const Numeric Cin,
9310 const String& model,
9311 ConstVectorView f_grid,
9312 ConstVectorView abs_p,
9313 ConstVectorView abs_t,
9314 ConstVectorView vmr,
9315 const Verbosity& verbosity)
9316{
9317 CREATE_OUT3ArtsOut3 out3(verbosity);
9318
9319 // check the model name about consistency
9320 if ((model != "user") && (model != "CKDMT100"))
9321 {
9322 ostringstream os;
9323 os << "!!ERROR!!\n"
9324 << "CKD_MT1.00 H2O foreign continuum:\n"
9325 << "INPUT model name is: " << model << ".\n"
9326 << "VALID model names are user and CKDMT100\n";
9327 throw runtime_error(os.str());
9328 }
9329
9330
9331 // scaling factor of the foreign H2O cont. absorption
9332 Numeric ScalingFac = 1.0000e0;
9333 if ( model == "user" )
9334 {
9335 ScalingFac = Cin; // input scaling factor of calculated absorption
9336 }
9337
9338
9339 const Index n_p = abs_p.nelem(); // Number of pressure levels
9340 const Index n_f = f_grid.nelem(); // Number of frequencies
9341
9342
9343 // Check that dimensions of abs_p, abs_t, and vmr agree:
9344 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9344
, "n_p==abs_t.nelem()") : (void)0)
;
9345 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9345
, "n_p==vmr.nelem()") : (void)0)
;
9346
9347 // Check that dimensions of pxsec are consistent with n_f
9348 // and n_p. It should be [n_f,n_p]:
9349 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9349
, "n_f==pxsec.nrows()") : (void)0)
;
9350 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9350
, "n_p==pxsec.ncols()") : (void)0)
;
9351
9352
9353 // ************************** CKD stuff ************************************
9354
9355 const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
9356 const Numeric T1 = 273.000e0;
9357 const Numeric TO = 296.000e0;
9358 const Numeric PO = 1013.000e0;
9359
9360 // wavenumber range where CKD H2O self continuum is valid
9361 const Numeric VABS_min = -2.000e1; // [cm^-1]
9362 const Numeric VABS_max = 2.000e4; // [cm^-1]
9363
9364
9365 // It is assumed here that f_grid is monotonically increasing with index!
9366 // In future change this return into a change of the loop over
9367 // the frequency f_grid. n_f_new < n_f
9368 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9369 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9370 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
9371 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
9372 {
9373 out3 << "WARNING:\n"
9374 << " CKD_MT 1.00 H2O foreign continuum:\n"
9375 << " input frequency vector exceeds range of model validity\n"
9376 << " " << FH2O_ckd_mt_100_v1 << "<->" << FH2O_ckd_mt_100_v2 << "cm^-1\n";
9377 }
9378
9379
9380 // ---------------------- subroutine FRN296 ------------------------------
9381
9382 // retrieve the appropriate array sequence of the foreign continuum
9383 // arrays of the CKD model.
9384 Numeric DVC = FH2O_ckd_mt_100_dv;
9385 Numeric V1C = V1ABS - DVC;
9386 Numeric V2C = V2ABS + DVC;
9387
9388 int I1 = (int) ((V1C-FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
9389 if (V1C < FH2O_ckd_mt_100_v1) I1 = -1;
9390 V1C = FH2O_ckd_mt_100_v1 + (FH2O_ckd_mt_100_dv * (Numeric)I1);
9391
9392 int I2 = (int) ((V2C-FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
9393
9394 int NPTC = I2-I1+3;
9395 if (NPTC > FH2O_ckd_mt_100_npt) NPTC = FH2O_ckd_mt_100_npt+1;
9396
9397 V2C = V1C + FH2O_ckd_mt_100_dv * (Numeric)(NPTC-1);
9398
9399 if (NPTC < 1)
9400 {
9401 out3 << "WARNING:\n"
9402 << " CKD_MT 1.00 H2O foreign continuum:\n"
9403 << " no elements of internal continuum coefficients could be found for the\n"
9404 << " input frequency range.\n"
9405 << " Leave the function without calculating the absorption.";
9406 return;
9407 }
9408
9409 Vector FH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
9410
9411 for (Index J = 1 ; J <= NPTC ; ++J)
9412 {
9413 Index I = I1+J;
9414 if ( (I > 0) && (I <= FH2O_ckd_mt_100_npt) )
9415 {
9416 FH2OT0[J] = FH2O_ckd_mt_100[I];
9417 }
9418 }
9419
9420 // ---------------------- subroutine FRN296 ------------------------------
9421
9422
9423
9424
9425 // Loop pressure/temperature:
9426 for ( Index i = 0 ; i < n_p ; ++i )
9427 {
9428 // atmospheric state parameters
9429 Numeric Tave = abs_t[i]; // [K]
9430 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
9431 Numeric vmrh2o = vmr[i]; // [1]
9432 // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
9433 Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
9434 Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
9435 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
9436 // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
9437 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
9438
9439 // Molecular cross section calculated by CKD.
9440 // The cross sectionis calculated on the predefined
9441 // CKD wavenumber grid.
9442 Vector k(NPTC+addF77fields, 0.); // [1/cm]
9443 for (Index J = 1 ; J <= NPTC ; ++J)
9444 {
9445 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
9446 Numeric FH2O = FH2OT0[J];
9447
9448 // CKD cross section with radiative field [1/cm]
9449 // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
9450 // as multiplicative term
9451 k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
9452
9453 }
9454
9455 // Loop input frequency array. The previously calculated cross section
9456 // has therefore to be interpolated on the input frequencies.
9457 for ( Index s = 0 ; s < n_f ; ++s )
9458 {
9459 // calculate the associated wave number (= 1/wavelength)
9460 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9461 if ( (V >= 0.000e0) && (V < VABS_max) )
9462 {
9463 // arts CKD_MT.100 cross section [1/m]
9464 // interpolate the k vector on the f_grid grid
9465 // The factor 100 comes from the conversion from (1/cm) to (1/m)
9466 // of the abs. coeff.
9467 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
9468 }
9469 }
9470 }
9471
9472}
9473
9474//
9475// =================================================================================
9476
9477//! CKD version MT 2.50 H2O self continuum absorption model
9478/*!
9479 The following modifications to the water vapor continuum arise from new analyses of
9480 ARM measurements in the microwave and far-IR regions. Analyses of measurements
9481 in the microwave are based primarily on the two-channel MWR (23.8 and 31.4 GHz)
9482 at SGP, with supporting evidence from 150 GHz MWRHF measurements during the
9483 COPS campaign and from 170 GHz GVRP measurements at SGP (V. H. Payne, E. J.
9484 Mlawer and S. A. Clough). Measurements in the far-IR were from the AERI_ext at the
9485 NSA site, in the time surrounding and including the RHUBC-I campaign (J. Delamere
9486 and S. A. Clough).
9487
9488 \param[out] pxsec cross section (absorption/volume mixing ratio) of
9489 H2O self continuum according to CKD_MT 1.00 [1/m]
9490 \param Cin strength scaling factor [1]
9491 \param model allows user defined input parameter set
9492 (Cin)<br>
9493 or choice of
9494 pre-defined parameters of specific models (see note below).
9495 \param f_grid predefined frequency grid [Hz]
9496 \param abs_p predefined pressure grid [Pa]
9497 \param abs_t predefined temperature grid [K]
9498 \param vmr H2O volume mixing ratio profile [1]
9499
9500 \note This absorption model is taken from the FORTRAN77 code of
9501 CKD_MT version 2.50 written by<br>
9502 Atmospheric and Environmental Research Inc. (AER),<br>
9503 Radiation and Climate Group<br>
9504 131 Hartwell Avenue<br>
9505 Lexington, MA 02421, USA<br>
9506 http://www.rtweb.aer.com/continuum_frame.html
9507
9508 \author Mayuri Tatiya
9509 \date 2014-26-06
9510*/
9511void CKD_mt_250_self_h2o (MatrixView pxsec,
9512 const Numeric Cin,
9513 const String& model,
9514 ConstVectorView f_grid,
9515 ConstVectorView abs_p,
9516 ConstVectorView abs_t,
9517 ConstVectorView vmr,
9518 const Verbosity& verbosity)
9519{
9520 CREATE_OUT3ArtsOut3 out3(verbosity);
9521
9522 // check the model name about consistency
9523 if ((model != "user") && (model != "CKDMT252"))
9524 {
9525 ostringstream os;
9526 os << "!!ERROR!!\n"
9527 << "CKD_MT2.50 H2O self continuum:\n"
9528 << "INPUT model name is: " << model << ".\n"
9529 << "VALID model names are user and CKDMT252\n";
9530 throw runtime_error(os.str());
9531 }
9532
9533
9534 // scaling factor of the self H2O cont. absorption
9535 Numeric ScalingFac = 1.0000e0;
9536 if ( model == "user" )
9537 {
9538 ScalingFac = Cin; // input scaling factor of calculated absorption
9539 }
9540
9541
9542 const Index n_p = abs_p.nelem(); // Number of pressure levels
9543 const Index n_f = f_grid.nelem(); // Number of frequencies
9544
9545
9546 // Check that dimensions of abs_p, abs_t, and vmr agree:
9547 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9547
, "n_p==abs_t.nelem()") : (void)0)
;
9548 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9548
, "n_p==vmr.nelem()") : (void)0)
;
9549
9550 // Check that dimensions of pxsec are consistent with n_f
9551 // and n_p. It should be [n_f,n_p]:
9552 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9552
, "n_f==pxsec.nrows()") : (void)0)
;
9553 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9553
, "n_p==pxsec.ncols()") : (void)0)
;
9554
9555
9556 // ************************** CKD stuff ************************************
9557
9558 const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
9559 // FIXME const Numeric T1 = 273.000e0; // [K]
9560 const Numeric TO = 296.000e0; // [K]
9561 const Numeric PO = 1013.000e0; // [hPa]
9562
9563 const Numeric XFACREV[15] =
9564 {1.003, 1.009, 1.015, 1.023, 1.029,1.033,
9565 1.037, 1.039, 1.040, 1.046, 1.036,1.027,
9566 1.01, 1.002, 1.00};
9567
9568 const Numeric XFACREV1[120] =
9569 {1.000, 1.040, 1.080, 1.120, 1.160,
9570 1.200, 1.240, 1.280, 1.318, 1.357,
9571 1.404, 1.453, 1.499, 1.553, 1.608,
9572 1.674, 1.746, 1.818, 1.899, 1.984,
9573 2.078, 2.174, 2.276, 2.385, 2.502,
9574 2.624, 2.747, 2.883, 3.018, 3.170,
9575 3.321, 3.473, 3.635, 3.803, 3.974,
9576 4.144, 4.327, 4.500, 4.703, 4.887,
9577 5.102, 5.286, 5.498, 5.701, 5.935,
9578 6.155, 6.405, 6.633, 6.892, 7.115,
9579 7.397, 7.650, 7.917, 8.177, 8.437,
9580 8.704, 8.953, 9.192, 9.428, 9.644,
9581 9.821, 9.954, 10.11, 10.17, 10.21,
9582 10.26, 10.29, 10.28, 10.26, 10.20,
9583 10.15, 10.16, 10.25, 10.02, 9.965,
9584 10.01, 9.934, 9.847, 9.744, 9.566,
9585 9.436, 9.181, 8.872, 8.547, 8.155,
9586 7.730, 7.261, 6.777, 6.271, 5.807,
9587 5.313, 4.845, 4.444, 4.074, 3.677,
9588 3.362, 3.087, 2.826, 2.615, 2.385,
9589 2.238, 2.148, 1.979, 1.939, 1.773,
9590 1.696, 1.642, 1.569, 1.510, 1.474,
9591 1.425, 1.375, 1.322, 1.272, 1.230,
9592 1.180, 1.130, 1.080, 1.040, 1.000};
9593
9594 // wavenumber range where CKD H2O self continuum is valid
9595 const Numeric VABS_min = -2.000e1; // [cm^-1]
9596 const Numeric VABS_max = 2.000e4; // [cm^-1]
9597
9598
9599 // It is assumed here that f_grid is monotonically increasing with index!
9600 // In future change this return into a change of the loop over
9601 // the frequency f_grid. n_f_new < n_f
9602 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9603 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9604 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
9605 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
9606 {
9607 out3 << "WARNING:\n"
9608 << " CKD_MT 1.00 H2O self continuum:\n"
9609 << " input frequency vector exceeds range of model validity\n"
9610 << " " << SL296_ckd_mt_100_v1 << "<->" << SL296_ckd_mt_100_v2 << "cm^-1\n";
9611 }
9612
9613
9614 // ------------------- subroutine SL296/SL260 ----------------------------
9615
9616 if (SL296_ckd_mt_100_v1 != SL260_ckd_mt_100_v1)
9617 {
9618 ostringstream os;
9619 os << "!!ERROR!!\n"
9620 << "CKD_MT 1.00 H2O self continuum:\n"
9621 << "parameter V1 not the same for different ref. temperatures.\n";
9622 throw runtime_error(os.str());
9623 }
9624 if (SL296_ckd_mt_100_v2 != SL260_ckd_mt_100_v2)
9625 {
9626 ostringstream os;
9627 os << "!!ERROR!!\n"
9628 << "CKD_MT 1.00 H2O self continuum:\n"
9629 << "parameter V2 not the same for different ref. temperatures.\n";
9630 throw runtime_error(os.str());
9631 }
9632 if (SL296_ckd_mt_100_dv != SL260_ckd_mt_100_dv)
9633 {
9634 ostringstream os;
9635 os << "!!ERROR!!\n"
9636 << "CKD_MT 1.00 H2O self continuum:\n"
9637 << "parameter DV not the same for different ref. temperatures.\n";
9638 throw runtime_error(os.str());
9639 }
9640 if (SL296_ckd_mt_100_npt != SL260_ckd_mt_100_npt)
9641 {
9642 ostringstream os;
9643 os << "!!ERROR!!\n"
9644 << "CKD_MT 1.00 H2O self continuum:\n"
9645 << "parameter NPT not the same for different ref. temperatures.\n";
9646 throw runtime_error(os.str());
9647 }
9648
9649 // retrieve the appropriate array sequence of the self continuum
9650 // arrays of the CKD model.
9651 Numeric DVC = SL296_ckd_mt_100_dv;
9652 Numeric V1C = V1ABS - DVC;
9653 Numeric V2C = V2ABS + DVC;
9654
9655 int I1 = (int) ((V1C-SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
9656 if (V1C < SL296_ckd_mt_100_v1) I1 = -1;
9657 V1C = SL296_ckd_mt_100_v1 + (SL296_ckd_mt_100_dv * (Numeric)I1);
9658
9659 int I2 = (int) ((V2C-SL296_ckd_mt_100_v1) / SL296_ckd_mt_100_dv);
9660
9661 int NPTC = I2-I1+3;
9662 if (NPTC > SL296_ckd_mt_100_npt) NPTC = SL296_ckd_mt_100_npt+1;
9663
9664 V2C = V1C + SL296_ckd_mt_100_dv * (Numeric)(NPTC-1);
9665
9666 if (NPTC < 1)
9667 {
9668 out3 << "WARNING:\n"
9669 << " CKD_MT 1.00 H2O self continuum:\n"
9670 << " no elements of internal continuum coefficients could be found for the\n"
9671 << " input frequency range.\n"
9672 << " Leave the function without calculating the absorption.";
9673 return;
9674 }
9675
9676 Vector SH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
9677 Vector SH2OT1(NPTC+addF77fields, 0.); // [cm^3/molecules]
9678
9679 for (Index J = 1 ; J <= NPTC ; ++J)
9680 {
9681 Index I = I1+J;
9682 if ( (I > 0) && (I <= SL296_ckd_mt_100_npt) )
9683 {
9684 SH2OT0[J] = SL296_ckd_mt_100[I]; // at T=296 K
9685 SH2OT1[J] = SL260_ckd_mt_100[I]; // at T=260 K
9686 }
9687 }
9688
9689 // ------------------- subroutine SL296/SL260 ----------------------------
9690
9691 Numeric SFAC = 1.00e0;
9692
9693 // Loop pressure/temperature:
9694 for ( Index i = 0 ; i < n_p ; ++i )
9695 {
9696
9697 // atmospheric state parameters
9698 Numeric Tave = abs_t[i]; // [K]
9699 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
9700 Numeric Patm = Pave/PO; // [1]
9701 Numeric vmrh2o = vmr[i]; // [1]
9702 // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
9703 // second vmr in abs_coefCalc multiplied
9704 Numeric Rh2o = Patm * (TO/Tave); // [1]
9705 Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
9706 Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
9707 Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
9708 Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
9709
9710 // Molecular cross section calculated by CKD.
9711 // The cross sectionis calculated on the predefined
9712 // CKD wavenumber grid.
9713 Vector k(NPTC+addF77fields, 0.); // [1/cm]
9714 for (Index J = 1 ; J <= NPTC ; ++J)
9715 {
9716 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
9717 Numeric SH2O = 0.0e0;
9718 if (SH2OT0[J] > 0.0e0)
9719 {
9720 SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
9721 SFAC = 1.00e0;
9722
9723 if ( (VJ >= 820.0e0) && (VJ <= 960.0e0) )
9724 {
9725 int JFAC = (int)((VJ - 820.0e0)/10.0e0 + 0.00001e0);
9726 if ( (JFAC >= 0) && (JFAC <=14) )
9727 SFAC = XFACREV[JFAC];
9728 }
9729
9730 // CKD MT 2.5 correction to the self continuum (IASI data, fit to near-IR results of Bicknell et al., 2006 and Fulghum and Tilleman, 1991
9731
9732 if ( (VJ >= 2000.0e0) && (VJ <= 3190.0e0) )
9733 {
9734 int JFAC = (int)((VJ - 1990.0e0)/10.0e0 + 0.00001e0);
9735 if ( (JFAC >= 1) && (JFAC <=120) )
9736 SFAC = XFACREV1[JFAC];
9737 }
9738 SFAC = SFAC * ( 1.000e0 + ( 0.25e0/( 1.000e0 + pow( (VJ/350.0), 6.0)))); // CKD MT 2.4 (microwave and IR ARM data 0-600 cm-1)
9739
9740 SH2O = SFAC * SH2O;
9741 }
9742
9743
9744 // CKD cross section with radiative field [1/cm]
9745 // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
9746 // VMRH2O as multiplicative term
9747 k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
9748
9749 }
9750
9751
9752 // Loop input frequency array. The previously calculated cross section
9753 // has therefore to be interpolated on the input frequencies.
9754 for ( Index s = 0 ; s < n_f ; ++s )
9755 {
9756 // calculate the associated wave number (= 1/wavelength)
9757 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9758 if ( (V > 0.000e0) && (V < SL296_ckd_mt_100_v2) )
9759 {
9760 // arts cross section [1/m]
9761 // interpolate the k vector on the f_grid grid
9762 // The factor 100 comes from the conversion from 1/cm to 1/m for
9763 // the absorption coefficient
9764 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
9765 }
9766 }
9767 }
9768
9769}
9770
9771// =================================================================================
9772
9773//! CKD version MT 2.50 H2O foreign continuum absorption model
9774/*!
9775 \param[out] pxsec cross section (absorption/volume mixing ratio) of
9776 H2O foreign continuum according to CKD_MT 1.00 [1/m]
9777 \param Cin strength scaling factor [1]
9778 \param model allows user defined input parameter set
9779 (Cin)<br>
9780 or choice of
9781 pre-defined parameters of specific models (see note below).
9782 \param f_grid predefined frequency grid [Hz]
9783 \param abs_p predefined pressure grid [Pa]
9784 \param abs_t predefined temperature grid [K]
9785 \param vmr H2O volume mixing ratio profile [1]
9786
9787 \note This absorption model is taken from the FORTRAN77 code of
9788 CKD_MT version 1.00 written by<br>
9789 Atmospheric and Environmental Research Inc. (AER),<br>
9790 Radiation and Climate Group<br>
9791 131 Hartwell Avenue<br>
9792 Lexington, MA 02421, USA<br>
9793 http://www.rtweb.aer.com/continuum_frame.html
9794
9795 \author Mayuri Tatiya
9796 \date 2014-30-06
9797*/
9798void CKD_mt_250_foreign_h2o (MatrixView pxsec,
9799 const Numeric Cin,
9800 const String& model,
9801 ConstVectorView f_grid,
9802 ConstVectorView abs_p,
9803 ConstVectorView abs_t,
9804 ConstVectorView vmr,
9805 const Verbosity& verbosity)
9806{
9807 CREATE_OUT3ArtsOut3 out3(verbosity);
9808
9809 // check the model name about consistency
9810 if ((model != "user") && (model != "CKDMT252"))
9811 {
9812 ostringstream os;
9813 os << "!!ERROR!!\n"
9814 << "CKD_MT2.50 H2O foreign continuum:\n"
9815 << "INPUT model name is: " << model << ".\n"
9816 << "VALID model names are user and CKDMT252\n";
9817 throw runtime_error(os.str());
9818 }
9819
9820
9821 // scaling factor of the foreign H2O cont. absorption
9822 Numeric ScalingFac = 1.0000e0;
9823 if ( model == "user" )
9824 {
9825 ScalingFac = Cin; // input scaling factor of calculated absorption
9826 }
9827
9828
9829 const Index n_p = abs_p.nelem(); // Number of pressure levels
9830 const Index n_f = f_grid.nelem(); // Number of frequencies
9831
9832
9833 // Check that dimensions of abs_p, abs_t, and vmr agree:
9834 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9834
, "n_p==abs_t.nelem()") : (void)0)
;
9835 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9835
, "n_p==vmr.nelem()") : (void)0)
;
9836
9837 // Check that dimensions of pxsec are consistent with n_f
9838 // and n_p. It should be [n_f,n_p]:
9839 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9839
, "n_f==pxsec.nrows()") : (void)0)
;
9840 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 9840
, "n_p==pxsec.ncols()") : (void)0)
;
9841
9842
9843 // ************************** CKD stuff ************************************
9844
9845 const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
9846 const Numeric T1 = 273.000e0;
9847 const Numeric TO = 296.000e0;
9848 const Numeric PO = 1013.000e0;
9849
9850 // wavenumber range where CKD H2O self continuum is valid
9851 const Numeric VABS_min = -2.000e1; // [cm^-1]
9852 const Numeric VABS_max = 2.000e4; // [cm^-1]
9853
9854
9855 // It is assumed here that f_grid is monotonically increasing with index!
9856 // In future change this return into a change of the loop over
9857 // the frequency f_grid. n_f_new < n_f
9858 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9859 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9860 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
9861 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
9862 {
9863 out3 << "WARNING:\n"
9864 << " CKD_MT 2.50 H2O foreign continuum:\n"
9865 << " input frequency vector exceeds range of model validity\n"
9866 << " " << FH2O_ckd_mt_100_v1 << "<->" << FH2O_ckd_mt_100_v2 << "cm^-1\n";
9867 }
9868
9869
9870 // ---------------------- subroutine FRN296 ------------------------------
9871
9872 // retrieve the appropriate array sequence of the foreign continuum
9873 // arrays of the CKD model.
9874 Numeric DVC = FH2O_ckd_mt_100_dv;
9875 Numeric V1C = V1ABS - DVC;
9876 Numeric V2C = V2ABS + DVC;
9877
9878 int I1 = (int) ((V1C-FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
9879 if (V1C < FH2O_ckd_mt_100_v1) I1 = -1;
9880 V1C = FH2O_ckd_mt_100_v1 + (FH2O_ckd_mt_100_dv * (Numeric)I1);
9881
9882 int I2 = (int) ((V2C-FH2O_ckd_mt_100_v1) / FH2O_ckd_mt_100_dv);
9883
9884 int NPTC = I2-I1+3;
9885 if (NPTC > FH2O_ckd_mt_100_npt) NPTC = FH2O_ckd_mt_100_npt+1;
9886
9887 V2C = V1C + FH2O_ckd_mt_100_dv * (Numeric)(NPTC-1);
9888
9889 if (NPTC < 1)
9890 {
9891 out3 << "WARNING:\n"
9892 << " CKD_MT 2.50 H2O foreign continuum:\n"
9893 << " no elements of internal continuum coefficients could be found for the\n"
9894 << " input frequency range.\n"
9895 << " Leave the function without calculating the absorption.";
9896 return;
9897 }
9898
9899 Vector FH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
9900
9901 for (Index J = 1 ; J <= NPTC ; ++J)
9902 {
9903 Index I = I1+J;
9904 if ( (I > 0) && (I <= FH2O_ckd_mt_100_npt) )
9905 {
9906 FH2OT0[J] = FH2O_ckd_mt_100[I];
9907 }
9908 }
9909
9910 // ---------------------- subroutine FRN296 ------------------------------
9911
9912
9913
9914
9915 // Loop pressure/temperature:
9916 for ( Index i = 0 ; i < n_p ; ++i )
9917 {
9918 // atmospheric state parameters
9919 Numeric Tave = abs_t[i]; // [K]
9920 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
9921 Numeric vmrh2o = vmr[i]; // [1]
9922 // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
9923 Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
9924 Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
9925 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
9926 // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
9927 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
9928
9929 // Molecular cross section calculated by CKD.
9930 // The cross sectionis calculated on the predefined
9931 // CKD wavenumber grid.
9932 Vector k(NPTC+addF77fields, 0.); // [1/cm]
9933 for (Index J = 1 ; J <= NPTC ; ++J)
9934 {
9935 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
9936 Numeric VDELSQ1 = pow( (VJ - 255.67e0), 2e0 );
9937 Numeric VDELmSQ1 = pow( (VJ + 255.67e0), 2e0 );
9938 Numeric VF1 = pow( ((VJ-255.67e0)/57.83e0), 8e0);
9939 Numeric VmF1 = pow( ((VJ+255.67e0)/57.83e0), 8e0);
9940 Numeric VF2 = pow( ((VJ)/57.83e0), 8e0);
9941
9942 Numeric FSCAL = 1.000e0 + (0.06e0 + (-0.42e0)*( (57600e0/(VDELSQ1+57600e0+VF1)) + (57600e0/(VDELmSQ1+57600e0+VmF1)) ) )/(1.000e0 + 0.3e0 * VF2);
9943
9944 Numeric FH2O = FH2OT0[J] * FSCAL; //CKD MT 2.4
9945
9946
9947
9948 // CKD cross section with radiative field [1/cm]
9949 // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
9950 // as multiplicative term
9951 k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
9952
9953 }
9954
9955 // Loop input frequency array. The previously calculated cross section
9956 // has therefore to be interpolated on the input frequencies.
9957 for ( Index s = 0 ; s < n_f ; ++s )
9958 {
9959 // calculate the associated wave number (= 1/wavelength)
9960 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
9961 if ( (V >= 0.000e0) && (V < VABS_max) )
9962 {
9963 // arts CKD_MT.100 cross section [1/m]
9964 // interpolate the k vector on the f_grid grid
9965 // The factor 100 comes from the conversion from (1/cm) to (1/m)
9966 // of the abs. coeff.
9967 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
9968 }
9969 }
9970 }
9971
9972}
9973
9974//
9975
9976//
9977// =================================================================================
9978
9979//! CKD version MT 3.20 H2O self continuum absorption model
9980/*!
9981 The following modifications to the self water vapor continuum arise from:
9982
9983 August 2017: New coefficients for self continuum in window regions for wavenumbers greater than 2000 cm-1
9984 were added and self continuum temperature dependence from 1800-3500 cm-1 were updated (E.J. Mlawer,
9985 M.J. Alvarado, K.E. Cady-Pereira).
9986
9987 November 2016: SFAC re-adjusted based on RHUBC-II campaign. (Mlawer, E.J. et al. 2018
9988 Analysis of water vapor absorption in the far-infrared and submillimeter regions
9989 using surface radiometric measurements fromextremely dry locations, submitted)
9990
9991 July 2016: Self continuum coefficients were modified from 1880-2390 cm-1 to fix issues in the CO fundamental
9992 region that were pointed out by Alvarado et al. (2013).
9993
9994 \param[out] pxsec cross section (absorption/volume mixing ratio) of
9995 H2O self continuum according to CKD_MT 1.00 [1/m]
9996 \param Cin strength scaling factor [1]
9997 \param model allows user defined input parameter set
9998 (Cin)<br>
9999 or choice of
10000 pre-defined parameters of specific models (see note below).
10001 \param f_grid predefined frequency grid [Hz]
10002 \param abs_p predefined pressure grid [Pa]
10003 \param abs_t predefined temperature grid [K]
10004 \param vmr H2O volume mixing ratio profile [1]
10005
10006 \note This absorption model is taken from the FORTRAN77 code of
10007 CKD_MT version 3.20 contnm.f90 written by<br>
10008 Atmospheric and Environmental Research Inc. (AER),<br>
10009 Radiation and Climate Group<br>
10010 131 Hartwell Avenue<br>
10011 Lexington, MA 02421, USA<br>
10012 http://www.rtweb.aer.com/continuum_frame.html
10013
10014 \author Emma Turner
10015 \date 2018-29-10
10016*/
10017void CKD_mt_320_self_h2o (MatrixView pxsec,
10018 const Numeric Cin,
10019 const String& model,
10020 ConstVectorView f_grid,
10021 ConstVectorView abs_p,
10022 ConstVectorView abs_t,
10023 ConstVectorView vmr,
10024 const Verbosity& verbosity)
10025{
10026 CREATE_OUT3ArtsOut3 out3(verbosity);
10027
10028 // check the model name about consistency
10029 if ((model != "user") && (model != "CKDMT320"))
10030 {
10031 ostringstream os;
10032 os << "!!ERROR!!\n"
10033 << "CKD_MT3.20 H2O self continuum:\n"
10034 << "INPUT model name is: " << model << ".\n"
10035 << "VALID model names are user and CKDMT320\n";
10036 throw runtime_error(os.str());
10037 }
10038
10039
10040 // scaling factor of the self H2O cont. absorption
10041 Numeric ScalingFac = 1.0000e0;
10042 if ( model == "user" )
10043 {
10044 ScalingFac = Cin; // input scaling factor of calculated absorption
10045 }
10046
10047
10048 const Index n_p = abs_p.nelem(); // Number of pressure levels
10049 const Index n_f = f_grid.nelem(); // Number of frequencies
10050
10051
10052 // Check that dimensions of abs_p, abs_t, and vmr agree:
10053 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10053
, "n_p==abs_t.nelem()") : (void)0)
;
10054 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10054
, "n_p==vmr.nelem()") : (void)0)
;
10055
10056 // Check that dimensions of pxsec are consistent with n_f
10057 // and n_p. It should be [n_f,n_p]:
10058 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10058
, "n_f==pxsec.nrows()") : (void)0)
;
10059 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10059
, "n_p==pxsec.ncols()") : (void)0)
;
10060
10061
10062 // ************************** CKD stuff ************************************
10063
10064 const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
10065 // FIXME const Numeric T1 = 273.000e0; // [K]
10066 const Numeric TO = 296.000e0; // [K]
10067 const Numeric PO = 1013.000e0; // [hPa]
10068
10069 const Numeric XFACREV[15] =
10070 {1.003, 1.009, 1.015, 1.023, 1.029,1.033,
10071 1.037, 1.039, 1.040, 1.046, 1.036,1.027,
10072 1.01, 1.002, 1.00};
10073
10074 // wavenumber range where CKD H2O self continuum is valid
10075 const Numeric VABS_min = -2.000e1; // [cm^-1]
10076 const Numeric VABS_max = 2.000e4; // [cm^-1]
10077
10078 // It is assumed here that f_grid is monotonically increasing with index!
10079 // In future change this return into a change of the loop over
10080 // the frequency f_grid. n_f_new < n_f
10081 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10082 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10083 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
10084 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
10085 {
10086 out3 << "WARNING:\n"
10087 << " CKD_MT 3.20 H2O self continuum:\n"
10088 << " input frequency vector exceeds range of model validity\n"
10089 << " " << SL296_ckd_mt_320_v1 << "<->" << SL296_ckd_mt_320_v2 << "cm^-1\n";
10090 }
10091
10092
10093 // ------------------- subroutine SL296/SL260 ----------------------------
10094
10095 if (SL296_ckd_mt_320_v1 != SL260_ckd_mt_320_v1)
10096 {
10097 ostringstream os;
10098 os << "!!ERROR!!\n"
10099 << "CKD_MT 3.20 H2O self continuum:\n"
10100 << "parameter V1 not the same for different ref. temperatures.\n";
10101 throw runtime_error(os.str());
10102 }
10103 if (SL296_ckd_mt_320_v2 != SL260_ckd_mt_320_v2)
10104 {
10105 ostringstream os;
10106 os << "!!ERROR!!\n"
10107 << "CKD_MT 3.20 H2O self continuum:\n"
10108 << "parameter V2 not the same for different ref. temperatures.\n";
10109 throw runtime_error(os.str());
10110 }
10111 if (SL296_ckd_mt_320_dv != SL260_ckd_mt_320_dv)
10112 {
10113 ostringstream os;
10114 os << "!!ERROR!!\n"
10115 << "CKD_MT 3.20 H2O self continuum:\n"
10116 << "parameter DV not the same for different ref. temperatures.\n";
10117 throw runtime_error(os.str());
10118 }
10119 if (SL296_ckd_mt_320_npt != SL260_ckd_mt_320_npt)
10120 {
10121 ostringstream os;
10122 os << "!!ERROR!!\n"
10123 << "CKD_MT 3.20 H2O self continuum:\n"
10124 << "parameter NPT not the same for different ref. temperatures.\n";
10125 throw runtime_error(os.str());
10126 }
10127
10128 // retrieve the appropriate array sequence of the self continuum
10129 // arrays of the CKD model.
10130 Numeric DVC = SL296_ckd_mt_320_dv;
10131 Numeric V1C = V1ABS - DVC;
10132 Numeric V2C = V2ABS + DVC;
10133
10134 int I1 = (int) ((V1C-SL296_ckd_mt_320_v1) / SL296_ckd_mt_320_dv);
10135 if (V1C < SL296_ckd_mt_320_v1) I1 = -1;
10136 V1C = SL296_ckd_mt_320_v1 + (SL296_ckd_mt_320_dv * (Numeric)I1);
10137
10138 int I2 = (int) ((V2C-SL296_ckd_mt_320_v1) / SL296_ckd_mt_320_dv);
10139
10140 int NPTC = I2-I1+3;
10141 if (NPTC > SL296_ckd_mt_320_npt) NPTC = SL296_ckd_mt_320_npt+1;
10142
10143 V2C = V1C + SL296_ckd_mt_320_dv * (Numeric)(NPTC-1);
10144
10145 if (NPTC < 1)
10146 {
10147 out3 << "WARNING:\n"
10148 << " CKD_MT 3.20 H2O self continuum:\n"
10149 << " no elements of internal continuum coefficients could be found for the\n"
10150 << " input frequency range.\n"
10151 << " Leave the function without calculating the absorption.";
10152 return;
10153 }
10154
10155 Vector SH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
10156 Vector SH2OT1(NPTC+addF77fields, 0.); // [cm^3/molecules]
10157
10158 for (Index J = 1 ; J <= NPTC ; ++J)
10159 {
10160 Index I = I1+J;
10161 if ( (I > 0) && (I <= SL296_ckd_mt_320_npt) )
10162 {
10163 SH2OT0[J] = SL296_ckd_mt_320[I]; // at T=296 K
10164 SH2OT1[J] = SL260_ckd_mt_320[I]; // at T=260 K
10165 }
10166 }
10167
10168 // ------------------- subroutine SL296/SL260 ----------------------------
10169
10170 Numeric SFAC = 1.00e0;
10171
10172 // Loop pressure/temperature:
10173 for ( Index i = 0 ; i < n_p ; ++i )
10174 {
10175
10176 // atmospheric state parameters
10177 Numeric Tave = abs_t[i]; // [K]
10178 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10179 Numeric Patm = Pave/PO; // [1]
10180 Numeric vmrh2o = vmr[i]; // [1]
10181 // FIXME Numeric Ph2o = Patm * vmrh2o; // [1]
10182 // second vmr in abs_coefCalc multiplied
10183 Numeric Rh2o = Patm * (TO/Tave); // [1]
10184 Numeric Tfac = (Tave-TO)/(260.0-TO); // [1]
10185 Numeric WTOT = xLosmt * (Pave/1.013000e3) * (2.7300e2/Tave); // [molecules/cm^2]
10186 Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
10187 Numeric XKT = Tave / 1.4387752e0; // = (T*k_B)/(h*c)
10188
10189 // Molecular cross section calculated by CKD.
10190 // The cross sectionis calculated on the predefined
10191 // CKD wavenumber grid.
10192 Vector k(NPTC+addF77fields, 0.); // [1/cm]
10193 for (Index J = 1 ; J <= NPTC ; ++J)
10194 {
10195 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10196 Numeric SH2O = 0.0e0;
10197 if (SH2OT0[J] > 0.0e0)
10198 {
10199 SH2O = SH2OT0[J] * pow( (SH2OT1[J]/SH2OT0[J]), Tfac );
10200 SFAC = 1.00e0;
10201
10202 if ( (VJ >= 820.0e0) && (VJ <= 960.0e0) )
10203 {
10204 int JFAC = (int)((VJ - 820.0e0)/10.0e0 + 0.00001e0);
10205 if ( (JFAC >= 0) && (JFAC <=14) )
10206 SFAC = XFACREV[JFAC];
10207 }
10208
10209 SFAC = SFAC * ( 1.000e0 + ( 0.25e0/( 1.000e0 + pow( (VJ/350.0), 6.0)))); // CKD MT 2.4 (microwave and IR ARM data 0-600 cm-1)
10210
10211 SFAC = SFAC * ( 1.000e0 + ( 0.08e0/( 1.000e0 + pow( (VJ/40.0), 6.0)))); // CKD MT 3.0 correction from RHUBC-II Nov 2016 (Mlawer, E.J. et al. 2018)
10212
10213 SH2O = SFAC * SH2O;
10214 }
10215
10216
10217 // CKD cross section with radiative field [1/cm]
10218 // The VMRH2O will be multiplied in abs_coefCalc, hence Rh2o does not contain
10219 // VMRH2O as multiplicative term
10220 k[J] = W1 * Rh2o * (SH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
10221
10222 }
10223
10224
10225 // Loop input frequency array. The previously calculated cross section
10226 // has therefore to be interpolated on the input frequencies.
10227 for ( Index s = 0 ; s < n_f ; ++s )
10228 {
10229 // calculate the associated wave number (= 1/wavelength)
10230 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10231 if ( (V > 0.000e0) && (V < SL296_ckd_mt_320_v2) )
10232 {
10233 // arts cross section [1/m]
10234 // interpolate the k vector on the f_grid grid
10235 // The factor 100 comes from the conversion from 1/cm to 1/m for
10236 // the absorption coefficient
10237 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
10238 }
10239 }
10240 }
10241
10242}
10243
10244// =================================================================================
10245
10246//! CKD version MT 3.20 H2O foreign continuum absorption model
10247
10248/*!
10249
10250Changes from the release notes:
10251
10252December 2016: The continuum has been updated to MT_CKD v3.0, which included modifications to the H2O foreign
10253continuum from 0-600 cm-1 and the self continuum in the microwave that resulted from an analysis of measurements
10254taken at the ARM RHUBC-II campaign and a re-analysis of RHUBC-I measurements. (E.J. Mlawer, D.D. Turner,
10255S.N. Paine, V.H. Payne). Includes modifications to H2O foreign continuum coefficients in the far-infrared based on the analysis of
10256REFIR-PAD (Bianchini and Palchetti, 2008) measurements taken at Cerro Toco, Chile, as part of the ARM RHUBC-II
10257campaign and a re-analysis of the AERI-ER measurements from the ARM NSA site (first analyzed in
10258Delamere et al., (2010)). The foreign continuum was also changed in the sub-millimeter and microwave regions as a result of the analysis
10259of SAO FTS (Paine and Turner, 2013) measurements taken during the RHUBC-II campaign, which led to modification
10260of the H2O self continuum in this region to maintain good agreement with the microwave measurements analyzed in
10261Payne et al. (2008 and 2011).
10262
10263July 2016: Foreign continuum coefficients from 1800-3000 cm-1 were modified to improve agreement with Baranov
10264and Lafferty (2012); in the 1900-2150 cm-1 region, attention was also paid to IASI measurements
10265(Alvarado et al., 2013). Foreign continuum coefficients at wavenumbers greater than 4000 cm-1 were modified
10266based on Baranov and Lafferty (2012) and Mondelain et al. (2014) measurements (E.J. Mlawer and M.J. Alvarado).
10267
10268
10269 \param[out] pxsec cross section (absorption/volume mixing ratio) of
10270 H2O foreign continuum according to CKD_MT 1.00 [1/m]
10271 \param Cin strength scaling factor [1]
10272 \param model allows user defined input parameter set
10273 (Cin)<br>
10274 or choice of
10275 pre-defined parameters of specific models (see note below).
10276 \param f_grid predefined frequency grid [Hz]
10277 \param abs_p predefined pressure grid [Pa]
10278 \param abs_t predefined temperature grid [K]
10279 \param vmr H2O volume mixing ratio profile [1]
10280
10281 \note This absorption model is taken from the FORTRAN77 code of
10282 CKD_MT version 3.20 contnm.f90 written by<br>
10283 Atmospheric and Environmental Research Inc. (AER),<br>
10284 Radiation and Climate Group<br>
10285 131 Hartwell Avenue<br>
10286 Lexington, MA 02421, USA<br>
10287 http://www.rtweb.aer.com/continuum_frame.html
10288
10289 \author Emma Turner
10290 \date 2018-29-10
10291*/
10292void CKD_mt_320_foreign_h2o (MatrixView pxsec,
10293 const Numeric Cin,
10294 const String& model,
10295 ConstVectorView f_grid,
10296 ConstVectorView abs_p,
10297 ConstVectorView abs_t,
10298 ConstVectorView vmr,
10299 const Verbosity& verbosity)
10300{
10301 CREATE_OUT3ArtsOut3 out3(verbosity);
10302
10303 // check the model name about consistency
10304 if ((model != "user") && (model != "CKDMT320"))
10305 {
10306 ostringstream os;
10307 os << "!!ERROR!!\n"
10308 << "CKD_MT3.20 H2O foreign continuum:\n"
10309 << "INPUT model name is: " << model << ".\n"
10310 << "VALID model names are user and CKDMT320\n";
10311 throw runtime_error(os.str());
10312 }
10313
10314
10315 // scaling factor of the foreign H2O cont. absorption
10316 Numeric ScalingFac = 1.0000e0;
10317 if ( model == "user" )
10318 {
10319 ScalingFac = Cin; // input scaling factor of calculated absorption
10320 }
10321
10322
10323 const Index n_p = abs_p.nelem(); // Number of pressure levels
10324 const Index n_f = f_grid.nelem(); // Number of frequencies
10325
10326
10327 // Check that dimensions of abs_p, abs_t, and vmr agree:
10328 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10328
, "n_p==abs_t.nelem()") : (void)0)
;
10329 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10329
, "n_p==vmr.nelem()") : (void)0)
;
10330
10331 // Check that dimensions of pxsec are consistent with n_f
10332 // and n_p. It should be [n_f,n_p]:
10333 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10333
, "n_f==pxsec.nrows()") : (void)0)
;
10334 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10334
, "n_p==pxsec.ncols()") : (void)0)
;
10335
10336
10337 // ************************** CKD stuff ************************************
10338
10339 const Numeric xLosmt = 2.68675e19; // [molecules/cm^3]
10340 const Numeric T1 = 273.000e0;
10341 const Numeric TO = 296.000e0;
10342 const Numeric PO = 1013.000e0;
10343
10344 // wavenumber range where CKD H2O self continuum is valid
10345 const Numeric VABS_min = -2.000e1; // [cm^-1]
10346 const Numeric VABS_max = 2.000e4; // [cm^-1]
10347
10348 // Foreign correction factors from joint RHUBC-II/RHUBC-I
10349 // analysis (mt_ckd_3.0) for up to 600cm-1
10350 const Numeric XFAC_RHU[63] =
10351 { 0.7810,0.8330,
10352 0.8500,0.8330,0.7810,0.7540,0.8180,
10353 0.9140,0.9980,0.9830,0.9330,0.8850,
10354 0.8420,0.8070,0.8000,0.8010,0.8100,
10355 0.8090,0.8320,0.8180,0.7970,0.8240,
10356 0.8640,0.8830,0.8830,0.8470,0.8380,
10357 0.8660,0.9410,1.0400,1.0680,1.1410,
10358 1.0800,1.0340,1.1550,1.0990,1.0270,
10359 0.9500,0.8950,0.8150,0.7830,0.7700,
10360 0.7000,0.7650,0.7750,0.8500,0.9000,
10361 0.9050,0.9540,1.0200,1.0200,1.0250,
10362 1.0200,1.1000,1.1250,1.1200,1.1110,
10363 1.1370,1.1600,1.1490,1.1070,1.0640,
10364 1.0450};
10365
10366 // It is assumed here that f_grid is monotonically increasing with index!
10367 // In future change this return into a change of the loop over
10368 // the frequency f_grid. n_f_new < n_f
10369 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10370 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10371 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
10372 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
10373 {
10374 out3 << "WARNING:\n"
10375 << " CKD_MT 3.20 H2O foreign continuum:\n"
10376 << " input frequency vector exceeds range of model validity\n"
10377 << " " << FH2O_ckd_mt_320_v1 << "<->" << FH2O_ckd_mt_320_v2 << "cm^-1\n";
10378 }
10379
10380
10381 // ---------------------- subroutine FRN296 ------------------------------
10382
10383 // retrieve the appropriate array sequence of the foreign continuum
10384 // arrays of the CKD model.
10385 Numeric DVC = FH2O_ckd_mt_320_dv;
10386 Numeric V1C = V1ABS - DVC;
10387 Numeric V2C = V2ABS + DVC;
10388
10389 int I1 = (int) ((V1C-FH2O_ckd_mt_320_v1) / FH2O_ckd_mt_320_dv);
10390 if (V1C < FH2O_ckd_mt_320_v1) I1 = -1;
10391 V1C = FH2O_ckd_mt_320_v1 + (FH2O_ckd_mt_320_dv * (Numeric)I1);
10392
10393 int I2 = (int) ((V2C-FH2O_ckd_mt_320_v1) / FH2O_ckd_mt_320_dv);
10394
10395 int NPTC = I2-I1+3;
10396 if (NPTC > FH2O_ckd_mt_320_npt) NPTC = FH2O_ckd_mt_320_npt+1;
10397
10398 V2C = V1C + FH2O_ckd_mt_320_dv * (Numeric)(NPTC-1);
10399
10400 if (NPTC < 1)
10401 {
10402 out3 << "WARNING:\n"
10403 << " CKD_MT 3.20 H2O foreign continuum:\n"
10404 << " no elements of internal continuum coefficients could be found for the\n"
10405 << " input frequency range.\n"
10406 << " Leave the function without calculating the absorption.";
10407 return;
10408 }
10409
10410 Vector FH2OT0(NPTC+addF77fields, 0.); // [cm^3/molecules]
10411
10412 for (Index J = 1 ; J <= NPTC ; ++J)
10413 {
10414 Index I = I1+J;
10415 if ( (I > 0) && (I <= FH2O_ckd_mt_320_npt) )
10416 {
10417 FH2OT0[J] = FH2O_ckd_mt_320[I];
10418 }
10419 }
10420
10421 // ---------------------- subroutine FRN296 ------------------------------
10422
10423
10424 // Loop pressure/temperature:
10425 for ( Index i = 0 ; i < n_p ; ++i )
10426 {
10427 // atmospheric state parameters
10428 Numeric Tave = abs_t[i]; // [K]
10429 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10430 Numeric vmrh2o = vmr[i]; // [1]
10431 // FIXME Numeric ph2o = vmrh2o * Pave; // [hPa]
10432 Numeric PFRGN = (Pave/PO) * (1.00000e0 - vmrh2o); // dry air pressure [hPa]
10433 Numeric RFRGN = PFRGN * (TO/Tave); // [hPa]
10434 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
10435 // FIXME Numeric W1 = vmrh2o * WTOT; // [molecules/cm^2]
10436 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10437
10438 // Molecular cross section calculated by CKD.
10439 // The cross sectionis calculated on the predefined
10440 // CKD wavenumber grid.
10441 Vector k(NPTC+addF77fields, 0.); // [1/cm]
10442 for (Index J = 1 ; J <= NPTC ; ++J)
10443 {
10444 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10445
10446 int JFAC = 0;
10447 Numeric FSCAL = 0;
10448
10449 if ( VJ < 600e0 ) // New condition for MT-CKD 3.2
10450 {
10451 // Scaling factor below 600cm-1 based on RHUBC-II campaign
10452 JFAC = (int) ((VJ + 10e0)/10e0 + 0.00001e0);
10453 FSCAL = XFAC_RHU[JFAC];
10454 }
10455 else // same as from version 2.4 apart from the 630e0 in the VF2 equation
10456 {
10457 Numeric VDELSQ1 = pow( (VJ - 255.67e0), 2e0 );
10458 Numeric VDELmSQ1 = pow( (VJ + 255.67e0), 2e0 );
10459 Numeric VF1 = pow( ((VJ-255.67e0)/57.83e0), 8e0);
10460 Numeric VmF1 = pow( ((VJ+255.67e0)/57.83e0), 8e0);
10461 // Numeric VF2 = pow( ((VJ)/57.83e0), 8e0); // previous VF2 equation
10462 Numeric VF2 = pow( ((VJ)/630e0), 8e0); // the 630e0 factor is different from previous versions of VF2 equation
10463
10464 FSCAL = 1.000e0 + (0.06e0 + (-0.42e0)*( (57600e0/(VDELSQ1+57600e0+VF1)) + (57600e0/(VDELmSQ1+57600e0+VmF1)) ) )/(1.000e0 + 0.3e0 * VF2);
10465 }
10466
10467 Numeric FH2O = FH2OT0[J] * FSCAL;
10468
10469
10470 // CKD cross section with radiative field [1/cm]
10471 // The VMRH2O will be multiplied in abs_coefCalc, hence WTOT and not W1
10472 // as multiplicative term
10473 k[J] = WTOT * RFRGN * (FH2O*1.000e-20) * RADFN_FUN(VJ,XKT);
10474
10475 }
10476
10477 // Loop input frequency array. The previously calculated cross section
10478 // has therefore to be interpolated on the input frequencies.
10479 for ( Index s = 0 ; s < n_f ; ++s )
10480 {
10481 // calculate the associated wave number (= 1/wavelength)
10482 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10483 if ( (V >= 0.000e0) && (V < VABS_max) )
10484 {
10485 // arts CKD_MT.100 cross section [1/m]
10486 // interpolate the k vector on the f_grid grid
10487 // The factor 100 comes from the conversion from (1/cm) to (1/m)
10488 // of the abs. coeff.
10489 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
10490 }
10491 }
10492 }
10493
10494}
10495
10496// ===========END WATER VAPOUR MODELS==============================================
10497
10498
10499// =================================================================================
10500
10501//! CKD version 2.4.1 CO2 continuum absorption model
10502/*!
10503 \param[out] pxsec cross section (absorption/volume mixing ratio) of
10504 CO2 continuum according to CKD_MT 1.00 [1/m]
10505 \param Cin strength scaling factor [1]
10506 \param model allows user defined input parameter set
10507 (Cin)<br>
10508 or choice of
10509 pre-defined parameters of specific models (see note below).
10510 \param f_grid predefined frequency grid [Hz]
10511 \param abs_p predefined pressure grid [Pa]
10512 \param abs_t predefined temperature grid [K]
10513 \param vmr CO2 volume mixing ratio profile [1]
10514
10515 \note This absorption model is taken from the FORTRAN77 code of
10516 CKD version 2.4.1 written by<br>
10517 Atmospheric and Environmental Research Inc. (AER),<br>
10518 Radiation and Climate Group<br>
10519 131 Hartwell Avenue<br>
10520 Lexington, MA 02421, USA<br>
10521 http://www.rtweb.aer.com/continuum_frame.html
10522
10523 \author Thomas Kuhn
10524 \date 2002-28-08
10525 */
10526void CKD_241_co2 (MatrixView pxsec,
10527 const Numeric Cin,
10528 const String& model,
10529 ConstVectorView f_grid,
10530 ConstVectorView abs_p,
10531 ConstVectorView abs_t _U___attribute((unused)),
10532 ConstVectorView vmr _U___attribute((unused)),
10533 const Verbosity& verbosity)
10534{
10535 CREATE_OUT3ArtsOut3 out3(verbosity);
10536
10537 // check the model name about consistency
10538 if ((model != "user") && (model != "CKD241"))
10539 {
10540 ostringstream os;
10541 os << "!!ERROR!!\n"
10542 << "CKDv2.4.1 CO2 continuum:\n"
10543 << "INPUT model name is: " << model << ".\n"
10544 << "VALID model names are user and CKD241\n";
10545 throw runtime_error(os.str());
10546 }
10547
10548
10549 // scaling factor of the CO2 absorption
10550 Numeric ScalingFac = 0.0000e0;
10551 if ( model == "user" )
10552 {
10553 ScalingFac = Cin; // input scaling factor of calculated absorption
10554 }
10555 else
10556 {
10557 ScalingFac = 1.0000e0;
10558 }
10559
10560 const Index n_p = abs_p.nelem(); // Number of pressure levels
10561 const Index n_f = f_grid.nelem(); // Number of frequencies
10562
10563
10564 // Check that dimensions of abs_p, abs_t, and vmr agree:
10565 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10565
, "n_p==abs_t.nelem()") : (void)0)
;
10566 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10566
, "n_p==vmr.nelem()") : (void)0)
;
10567
10568 // Check that dimensions of pxsec are consistent with n_f
10569 // and n_p. It should be [n_f,n_p]:
10570 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10570
, "n_f==pxsec.nrows()") : (void)0)
;
10571 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10571
, "n_p==pxsec.ncols()") : (void)0)
;
10572
10573
10574 // ************************** CKD stuff ************************************
10575
10576 const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
10577 const Numeric T1 = 273.0e0;
10578 const Numeric TO = 296.0e0;
10579 const Numeric PO = 1013.0e0;
10580
10581 // wavenumber range where CKD CO2 continuum is valid
10582 const Numeric VABS_min = -2.000e1; // [cm^-1]
10583 const Numeric VABS_max = 1.000e4; // [cm^-1]
10584
10585
10586 // It is assumed here that f_grid is monotonically increasing with index!
10587 // In future change this return into a change of the loop over
10588 // the frequency f_grid. n_f_new < n_f
10589 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10590 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10591 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
10592 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
10593 {
10594 out3 << "WARNING:\n"
10595 << " CKDv2.4.1 CO2 continuum:\n"
10596 << " input frequency vector exceeds range of model validity\n"
10597 << " " << FCO2_ckd_mt_100_v1 << "<->" << FCO2_ckd_mt_100_v2 << "cm^-1\n";
10598 }
10599
10600
10601 // ---------------------- subroutine FRNCO2 ------------------------------
10602
10603 // retrieve the appropriate array sequence of the CO2 continuum
10604 // arrays of the CKD model.
10605 Numeric DVC = FCO2_ckd_mt_100_dv;
10606 Numeric V1C = V1ABS - DVC;
10607 Numeric V2C = V2ABS + DVC;
10608
10609 int I1 = (int) ((V1C-FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
10610 if (V1C < FCO2_ckd_mt_100_v1) I1 = -1;
10611 V1C = FCO2_ckd_mt_100_v1 + (FCO2_ckd_mt_100_dv * (Numeric)I1);
10612
10613 int I2 = (int) ((V2C-FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
10614
10615 int NPTC = I2-I1+3;
10616 if (NPTC > FCO2_ckd_mt_100_npt) NPTC = FCO2_ckd_mt_100_npt+1;
10617
10618 V2C = V1C + FCO2_ckd_mt_100_dv * (Numeric)(NPTC-1);
10619
10620 if (NPTC < 1)
10621 {
10622 out3 << "WARNING:\n"
10623 << " CKDv2.4.1 CO2 continuum:\n"
10624 << " no elements of internal continuum coefficients could be found for the\n"
10625 << " input frequency range.\n"
10626 << " Leave the function without calculating the absorption.";
10627 return;
10628 }
10629
10630 Numeric FCO2T0[NPTC+addF77fields]; // [cm^3/molecules]
10631
10632 for (Index J = 1 ; J <= NPTC ; ++J)
10633 {
10634 Index I = I1+J;
10635 if ( (I < 1) || (I > FCO2_ckd_mt_100_npt) )
10636 {
10637 FCO2T0[J] = 0.0e0;
10638 }
10639 else
10640 {
10641 FCO2T0[J] = FCO2_ckd_mt_100[I];
10642 }
10643 }
10644
10645 // ---------------------- subroutine FRNCO2 ------------------------------
10646
10647
10648
10649
10650 // Loop pressure/temperature:
10651 for ( Index i = 0 ; i < n_p ; ++i )
10652 {
10653 Numeric Tave = abs_t[i]; // [K]
10654 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10655 // FIXME Numeric vmrco2 = vmr[i]; // [1]
10656 Numeric Rhoave = (Pave/PO) * (TO/Tave); // [hPa]
10657 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
10658 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10659
10660
10661 // Molecular cross section calculated by CKD.
10662 // The cross sectionis calculated on the predefined
10663 // CKD wavenumber grid.
10664 Numeric k[NPTC+addF77fields]; // [1/cm]
10665 k[0] = 0.00e0; // not used array field
10666 for (Index J = 1 ; J <= NPTC ; ++J)
10667 {
10668 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10669 Numeric FCO2 = FCO2T0[J];
10670
10671 // CKD cross section times number density with radiative field [1]
10672 // the VMRCO2 will be multiplied in abs_coefCalc
10673 k[J] = ((WTOT * Rhoave) * (FCO2*1.000e-20) * RADFN_FUN(VJ,XKT));
10674
10675 }
10676
10677
10678 // Loop input frequency array. The previously calculated cross section
10679 // has therefore to be interpolated on the input frequencies.
10680 for ( Index s = 0 ; s < n_f ; ++s )
10681 {
10682 // calculate the associated wave number (= 1/wavelength)
10683 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10684 if ( (V > 0.000e0) && (V < FCO2_ckd_mt_100_v2) )
10685 {
10686 // arts cross section [1/m]
10687 // interpolate the k vector on the f_grid grid
10688 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,
10689 NPTC+addF77fields,V);
10690 }
10691 }
10692 }
10693
10694}
10695
10696// =================================================================================
10697
10698
10699//! CKD version MT 1.00 CO2 continuum absorption model
10700/*!
10701 \param[out] pxsec cross section (absorption/volume mixing ratio) of
10702 CO2 continuum according to CKD_MT 1.00 [1/m]
10703 \param Cin strength scaling factor [1]
10704 \param model allows user defined input parameter set
10705 (Cin)<br>
10706 or choice of
10707 pre-defined parameters of specific models (see note below).
10708 \param f_grid predefined frequency grid [Hz]
10709 \param abs_p predefined pressure grid [Pa]
10710 \param abs_t predefined temperature grid [K]
10711 \param vmr CO2 volume mixing ratio profile [1]
10712
10713 \note This absorption model is taken from the FORTRAN77 code of
10714 CKD_MT version 1.00 written by<br>
10715 Atmospheric and Environmental Research Inc. (AER),<br>
10716 Radiation and Climate Group<br>
10717 131 Hartwell Avenue<br>
10718 Lexington, MA 02421, USA<br>
10719 http://www.rtweb.aer.com/continuum_frame.html
10720
10721 \author Thomas Kuhn
10722 \date 2002-28-08
10723 */
10724void CKD_mt_co2 (MatrixView pxsec,
10725 const Numeric Cin,
10726 const String& model,
10727 ConstVectorView f_grid,
10728 ConstVectorView abs_p,
10729 ConstVectorView abs_t,
10730 ConstVectorView vmr _U___attribute((unused)),
10731 const Verbosity& verbosity)
10732{
10733 CREATE_OUT3ArtsOut3 out3(verbosity);
10734
10735 // check the model name about consistency
10736 if ((model != "user") && (model != "CKDMT100"))
10737 {
10738 ostringstream os;
10739 os << "!!ERROR!!\n"
10740 << "CKD_MT.1.00 CO2 continuum:\n"
10741 << "INPUT model name is: " << model << ".\n"
10742 << "VALID model names are user and CKDMT100\n";
10743 throw runtime_error(os.str());
10744 }
10745
10746
10747 // scaling factor of the CO2 absorption
10748 Numeric ScalingFac = 0.0000e0;
10749 if ( model == "user" )
10750 {
10751 ScalingFac = Cin; // input scaling factor of calculated absorption
10752 }
10753 else
10754 {
10755 ScalingFac = 1.0000e0;
10756 }
10757
10758 const Index n_p = abs_p.nelem(); // Number of pressure levels
10759 const Index n_f = f_grid.nelem(); // Number of frequencies
10760
10761
10762 // Check that dimensions of abs_p, abs_t, and vmr agree:
10763 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10763
, "n_p==abs_t.nelem()") : (void)0)
;
10764 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10764
, "n_p==vmr.nelem()") : (void)0)
;
10765
10766 // Check that dimensions of pxsec are consistent with n_f
10767 // and n_p. It should be [n_f,n_p]:
10768 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10768
, "n_f==pxsec.nrows()") : (void)0)
;
10769 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10769
, "n_p==pxsec.ncols()") : (void)0)
;
10770
10771
10772 // ************************** CKD stuff ************************************
10773
10774 const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
10775 const Numeric T1 = 273.0e0;
10776 const Numeric TO = 296.0e0;
10777 const Numeric PO = 1013.0e0;
10778
10779 // wavenumber range where CKD CO2 continuum is valid
10780 const Numeric VABS_min = FCO2_ckd_mt_100_v1; // [cm^-1]
10781 const Numeric VABS_max = FCO2_ckd_mt_100_v2; // [cm^-1]
10782
10783
10784 // It is assumed here that f_grid is monotonically increasing with index!
10785 // In future change this return into a change of the loop over
10786 // the frequency f_grid. n_f_new < n_f
10787 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10788 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10789 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
10790 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
10791 {
10792 out3 << "WARNING:\n"
10793 << " CKD_MT 1.00 CO2 continuum:\n"
10794 << " input frequency vector exceeds range of model validity\n"
10795 << " " << FCO2_ckd_mt_100_v1 << "<->" << FCO2_ckd_mt_100_v2 << "cm^-1\n";
10796 }
10797
10798
10799 // ---------------------- subroutine FRNCO2 ------------------------------
10800
10801 // retrieve the appropriate array sequence of the CO2 continuum
10802 // arrays of the CKD model.
10803 Numeric DVC = FCO2_ckd_mt_100_dv;
10804 Numeric V1C = V1ABS - DVC;
10805 Numeric V2C = V2ABS + DVC;
10806
10807 int I1 = (int) ((V1C-FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
10808 if (V1C < FCO2_ckd_mt_100_v1) I1 = -1;
10809 V1C = FCO2_ckd_mt_100_v1 + (FCO2_ckd_mt_100_dv * (Numeric)I1);
10810
10811 int I2 = (int) ((V2C-FCO2_ckd_mt_100_v1) / FCO2_ckd_mt_100_dv);
10812
10813 int NPTC = I2-I1+3;
10814 if (NPTC > FCO2_ckd_mt_100_npt) NPTC = FCO2_ckd_mt_100_npt+1;
10815
10816 V2C = V1C + FCO2_ckd_mt_100_dv * (Numeric)(NPTC-1);
10817
10818 if (NPTC < 1)
10819 {
10820 out3 << "WARNING:\n"
10821 << " CKD_MT 1.00 CO2 continuum:\n"
10822 << " no elements of internal continuum coefficients could be found for the\n"
10823 << " input frequency range.\n"
10824 << " Leave the function without calculating the absorption.";
10825 return;
10826 }
10827
10828 Vector FCO2T0(NPTC+addF77fields, 0.); // [cm^3/molecules]
10829
10830 for (Index J = 1 ; J <= NPTC ; ++J)
10831 {
10832 Index I = I1+J;
10833 if ( (I > 0) && (I <= FCO2_ckd_mt_100_npt) )
10834 {
10835 FCO2T0[J] = FCO2_ckd_mt_100[I];
10836 }
10837 }
10838
10839 // ---------------------- subroutine FRNCO2 ------------------------------
10840
10841
10842
10843
10844 // Loop pressure/temperature:
10845 for ( Index i = 0 ; i < n_p ; ++i )
10846 {
10847 Numeric Tave = abs_t[i]; // [K]
10848 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
10849 // FIXME Numeric vmrco2 = vmr[i]; // [1]
10850 Numeric Rhoave = (Pave/PO) * (TO/Tave); // [hPa]
10851 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
10852 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
10853
10854
10855 // Molecular cross section calculated by CKD.
10856 // The cross sectionis calculated on the predefined
10857 // CKD wavenumber grid.
10858 Vector k(NPTC+addF77fields, 0.); // [1/cm]
10859 for (Index J = 1 ; J <= NPTC ; ++J)
10860 {
10861 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
10862 Numeric FCO2 = FCO2T0[J];
10863
10864 // continuum has been increased in the nu2 band by a factor of 7
10865 if ( (VJ > 500.0e0) && (VJ < 900.0e0) )
10866 {
10867 FCO2 = 7.000e0 * FCO2;
10868 }
10869
10870 // CKD cross section times number density with radiative field [1]
10871 // the VMRCO2 will be multiplied in abs_coefCalc
10872 k[J] = ((WTOT * Rhoave) * (FCO2*1.000e-20) * RADFN_FUN(VJ,XKT));
10873
10874 }
10875
10876
10877 // Loop input frequency array. The previously calculated cross section
10878 // has therefore to be interpolated on the input frequencies.
10879 for ( Index s = 0 ; s < n_f ; ++s )
10880 {
10881 // calculate the associated wave number (= 1/wavelength)
10882 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
10883 if ( (V > 0.000e0) && (V < FCO2_ckd_mt_100_v2) )
10884 {
10885 // arts cross section [1/m]
10886 // interpolate the k vector on the f_grid grid
10887 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
10888 }
10889 }
10890 }
10891
10892}
10893// =================================================================================
10894
10895
10896//! CKD version MT 2.50 CO2 continuum absorption model
10897/*!
10898 \param[out] pxsec cross section (absorption/volume mixing ratio) of
10899 CO2 continuum according to CKD_MT 1.00 [1/m]
10900 \param Cin strength scaling factor [1]
10901 \param model allows user defined input parameter set
10902 (Cin)<br>
10903 or choice of
10904 pre-defined parameters of specific models (see note below).
10905 \param f_grid predefined frequency grid [Hz]
10906 \param abs_p predefined pressure grid [Pa]
10907 \param abs_t predefined temperature grid [K]
10908 \param vmr CO2 volume mixing ratio profile [1]
10909
10910 \note This absorption model is taken from the FORTRAN77 code of
10911 CKD_MT version 2.50 written by<br>
10912 Atmospheric and Environmental Research Inc. (AER),<br>
10913 Radiation and Climate Group<br>
10914 131 Hartwell Avenue<br>
10915 Lexington, MA 02421, USA<br>
10916 http://www.rtweb.aer.com/continuum_frame.html
10917
10918 \author Mayuri Tatiya
10919 \date 2014-26-06
10920 */
10921void CKD_mt_250_co2 (MatrixView pxsec,
10922 const Numeric Cin,
10923 const String& model,
10924 ConstVectorView f_grid,
10925 ConstVectorView abs_p,
10926 ConstVectorView abs_t,
10927 ConstVectorView vmr _U___attribute((unused)),
10928 const Verbosity& verbosity)
10929{
10930 CREATE_OUT3ArtsOut3 out3(verbosity);
10931
10932 // check the model name about consistency
10933 if ((model != "user") && (model != "CKDMT252"))
10934 {
10935 ostringstream os;
10936 os << "!!ERROR!!\n"
10937 << "CKD_MT.2.50 CO2 continuum:\n"
10938 << "INPUT model name is: " << model << ".\n"
10939 << "VALID model names are user and CKDMT252\n";
10940 throw runtime_error(os.str());
10941 }
10942
10943
10944 // scaling factor of the CO2 absorption
10945 Numeric ScalingFac = 0.0000e0;
10946 if ( model == "user" )
10947 {
10948 ScalingFac = Cin; // input scaling factor of calculated absorption
10949 }
10950 else
10951 {
10952 ScalingFac = 1.0000e0;
10953 }
10954
10955 const Index n_p = abs_p.nelem(); // Number of pressure levels
10956 const Index n_f = f_grid.nelem(); // Number of frequencies
10957
10958
10959 // Check that dimensions of abs_p, abs_t, and vmr agree:
10960 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10960
, "n_p==abs_t.nelem()") : (void)0)
;
10961 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10961
, "n_p==vmr.nelem()") : (void)0)
;
10962
10963 // Check that dimensions of pxsec are consistent with n_f
10964 // and n_p. It should be [n_f,n_p]:
10965 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10965
, "n_f==pxsec.nrows()") : (void)0)
;
10966 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 10966
, "n_p==pxsec.ncols()") : (void)0)
;
10967
10968
10969 // ************************** CKD stuff ************************************
10970
10971 const Numeric xLosmt = 2.686763e19; // [molecules/cm^3]
10972 const Numeric T1 = 273.0e0;
10973 const Numeric TO = 296.0e0;
10974 const Numeric PO = 1013.0e0;
10975// Temparature dependence coefficients for wavenumbers between 2386
10976// and 2434. Computed based on (line-coupled) continuum coefficients
10977// at 250K and 296K, set to unity at T_eff (determined by invariance
10978// of calculations in this region for IASI low PWV cases).
10979 const Numeric tdep_bandhead[25] = {
10980 1.44e-01,3.61e-01,5.71e-01,7.63e-01,8.95e-01,
10981 9.33e-01,8.75e-01,7.30e-01,5.47e-01,3.79e-01,
10982 2.55e-01,1.78e-01,1.34e-01,1.07e-01,9.06e-02,
10983 7.83e-02,6.83e-02,6.00e-02,5.30e-02,4.72e-02,
10984 4.24e-02,3.83e-02,3.50e-02,3.23e-02,3.01e-02};
10985// Correction factors for CO2 from 2000-3000 cm-1 (mt_ckd_2.5)
10986// (stored every 2 cm-1 - same as CO2 continuum).
10987 const Numeric XfacCO2[500] = {
10988 1.0000,0.9998,0.9997,0.9996,0.9995,0.9994,0.9992,0.9991,
10989 0.9991,0.9990,0.9990,0.9989,0.9988,0.9988,0.9987,0.9986,
10990 0.9985,0.9984,0.9983,0.9982,0.9981,0.9980,0.9979,0.9978,
10991 0.9976,
10992 0.9975,0.9973,0.9972,0.9970,0.9969,0.9967,0.9965,0.9963,
10993 0.9961,0.9958,0.9956,0.9954,0.9951,0.9948,0.9946,0.9943,
10994 0.9940,0.9936,0.9933,0.9929,0.9926,0.9922,0.9918,0.9913,
10995 0.9909,
10996 0.9904,0.9899,0.9894,0.9889,0.9884,0.9878,0.9872,0.9866,
10997 0.9859,0.9853,0.9846,0.9838,0.9831,0.9823,0.9815,0.9806,
10998 0.9798,0.9789,0.9779,0.9770,0.9759,0.9749,0.9738,0.9727,
10999 0.9716,
11000 0.9704,0.9691,0.9679,0.9666,0.9652,0.9638,0.9624,0.9609,
11001 0.9594,0.9578,0.9562,0.9546,0.9529,0.9511,0.9493,0.9475,
11002 0.9456,0.9436,0.9417,0.9396,0.9375,0.9354,0.9332,0.9310,
11003 0.9287,
11004 0.9264,0.9240,0.9216,0.9191,0.9166,0.9140,0.9114,0.9087,
11005 0.9060,0.9032,0.9004,0.8976,0.8947,0.8917,0.8887,0.8857,
11006 0.8827,0.8796,0.8764,0.8732,0.8700,0.8668,0.8635,0.8602,
11007 0.8568,
11008 0.8534,0.8500,0.8466,0.8432,0.8397,0.8362,0.8327,0.8292,
11009 0.8257,0.8221,0.8186,0.8151,0.8115,0.8080,0.8044,0.8009,
11010 0.7973,0.7938,0.7903,0.7868,0.7833,0.7799,0.7764,0.7730,
11011 0.7697,
11012 0.7663,0.7630,0.7597,0.7565,0.7533,0.7502,0.7471,0.7441,
11013 0.7411,0.7382,0.7354,0.7326,0.7298,0.7272,0.7246,0.7221,
11014 0.7197,0.7173,0.7150,0.7129,0.7108,0.7088,0.7068,0.7050,
11015 0.7033,
11016 0.7016,0.7001,0.6986,0.6973,0.6961,0.6949,0.6939,0.6930,
11017 0.6921,0.6914,0.6908,0.6903,0.6899,0.6897,0.6895,0.6895,
11018 0.6895,0.6895,0.6895,0.6895,0.6908,0.7014,0.7121,0.7227,
11019 0.7552,
11020 0.8071,0.8400,0.9012,0.9542,1.0044,1.0330,1.0554,1.0766,
11021 1.0967,1.1160,1.1346,1.1525,1.1700,1.1869,1.2035,1.2196,
11022 1.2354,1.2509,1.2662,1.2811,1.2958,1.3103,1.3245,1.3386,
11023 1.3525,
11024 1.3661,1.3796,1.3930,1.4062,1.4193,1.4322,1.4449,1.4576,
11025 1.4701,1.4825,1.4949,1.5070,1.5191,1.5311,1.5430,1.5548,
11026 1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,
11027 1.5550,
11028 1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,1.5550,
11029 1.5550,1.5550,1.5550,1.5549,1.5547,1.5543,1.5539,1.5532,
11030 1.5525,1.5516,1.5506,1.5494,1.5481,1.5467,1.5452,1.5435,
11031 1.5417,
11032 1.5397,1.5377,1.5355,1.5332,1.5308,1.5282,1.5255,1.5228,
11033 1.5199,1.5169,1.5137,1.5105,1.5072,1.5037,1.5002,1.4966,
11034 1.4929,1.4890,1.4851,1.4811,1.4771,1.4729,1.4686,1.4643,
11035 1.4599,
11036 1.4555,1.4509,1.4463,1.4417,1.4370,1.4322,1.4274,1.4225,
11037 1.4176,1.4126,1.4076,1.4025,1.3974,1.3923,1.3872,1.3820,
11038 1.3768,1.3716,1.3663,1.3611,1.3558,1.3505,1.3452,1.3400,
11039 1.3347,
11040 1.3294,1.3241,1.3188,1.3135,1.3083,1.3030,1.2978,1.2926,
11041 1.2874,1.2822,1.2771,1.2720,1.2669,1.2618,1.2568,1.2518,
11042 1.2468,1.2419,1.2370,1.2322,1.2274,1.2227,1.2180,1.2133,
11043 1.2087,
11044 1.2041,1.1996,1.1952,1.1907,1.1864,1.1821,1.1778,1.1737,
11045 1.1695,1.1654,1.1614,1.1575,1.1536,1.1497,1.1460,1.1422,
11046 1.1386,1.1350,1.1314,1.1280,1.1246,1.1212,1.1179,1.1147,
11047 1.1115,
11048 1.1084,1.1053,1.1024,1.0994,1.0966,1.0938,1.0910,1.0883,
11049 1.0857,1.0831,1.0806,1.0781,1.0757,1.0734,1.0711,1.0688,
11050 1.0667,1.0645,1.0624,1.0604,1.0584,1.0565,1.0546,1.0528,
11051 1.0510,
11052 1.0493,1.0476,1.0460,1.0444,1.0429,1.0414,1.0399,1.0385,
11053 1.0371,1.0358,1.0345,1.0332,1.0320,1.0308,1.0296,1.0285,
11054 1.0275,1.0264,1.0254,1.0244,1.0235,1.0226,1.0217,1.0208,
11055 1.0200,
11056 1.0192,1.0184,1.0177,1.0170,1.0163,1.0156,1.0150,1.0143,
11057 1.0137,1.0132,1.0126,1.0121,1.0116,1.0111,1.0106,1.0101,
11058 1.0097,1.0092,1.0088,1.0084,1.0081,1.0077,1.0074,1.0070,
11059 1.0067,
11060 1.0064,1.0061,1.0058,1.0055,1.0053,1.0050,1.0048,1.0046,
11061 1.0043,1.0041,1.0039,1.0037,1.0036,1.0034,1.0032,1.0030,
11062 1.0029,1.0027,1.0026,1.0025,1.0023,1.0022,1.0021,1.0020,
11063 1.0019,
11064 1.0018,1.0017,1.0016,1.0015,1.0014,1.0014,1.0013,1.0012,
11065 1.0011,1.0011,1.0010,1.0010,1.0009,1.0009,1.0008,1.0007,
11066 1.0006,1.0005,1.0004,1.0003,1.0002,1.0001,1.0000,1.0000,
11067 1.0000};
11068
11069 // wavenumber range where CKD CO2 continuum is valid
11070 const Numeric VABS_min = FCO2_ckd_mt_250_v1; // [cm^-1]
11071 const Numeric VABS_max = FCO2_ckd_mt_250_v2; // [cm^-1]
11072
11073
11074 // It is assumed here that f_grid is monotonically increasing with index!
11075 // In future change this return into a change of the loop over
11076 // the frequency f_grid. n_f_new < n_f
11077 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11078 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11079 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
11080 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
11081 {
11082 out3 << "WARNING:\n"
11083 << " CKD_MT 2.50 CO2 continuum:\n"
11084 << " input frequency vector exceeds range of model validity\n"
11085 << " " << FCO2_ckd_mt_250_v1 << "<->" << FCO2_ckd_mt_250_v2 << "cm^-1\n";
11086 }
11087
11088
11089 // ---------------------- subroutine FRNCO2 ------------------------------
11090
11091 // retrieve the appropriate array sequence of the CO2 continuum
11092 // arrays of the CKD model.
11093 Numeric DVC = FCO2_ckd_mt_250_dv;
11094 Numeric V1C = V1ABS - DVC;
11095 Numeric V2C = V2ABS + DVC;
11096
11097 int I1 = (int) ((V1C-FCO2_ckd_mt_250_v1) / FCO2_ckd_mt_250_dv);
11098 if (V1C < FCO2_ckd_mt_250_v1) I1 = -1;
11099 V1C = FCO2_ckd_mt_250_v1 + (FCO2_ckd_mt_250_dv * (Numeric)I1);
11100
11101 int I2 = (int) ((V2C-FCO2_ckd_mt_250_v1) / FCO2_ckd_mt_250_dv);
11102
11103 int NPTC = I2-I1+3;
11104 if (NPTC > FCO2_ckd_mt_250_npt) NPTC = FCO2_ckd_mt_250_npt+1;
11105
11106 V2C = V1C + FCO2_ckd_mt_250_dv * (Numeric)(NPTC-1);
11107
11108 if (NPTC < 1)
11109 {
11110 out3 << "WARNING:\n"
11111 << " CKD_MT 2.50 CO2 continuum:\n"
11112 << " no elements of internal continuum coefficients could be found for the\n"
11113 << " input frequency range.\n"
11114 << " Leave the function without calculating the absorption.";
11115 return;
11116 }
11117
11118 Vector FCO2T0(NPTC+addF77fields, 0.); // [cm^3/molecules]
11119
11120 for (Index J = 1 ; J <= NPTC ; ++J)
11121 {
11122 Index I = I1+J;
11123 if ( (I > 0) && (I <= FCO2_ckd_mt_250_npt) )
11124 {
11125 FCO2T0[J] = FCO2_ckd_mt_250[I];
11126 }
11127 }
11128
11129 // ---------------------- subroutine FRNCO2 ------------------------------
11130
11131
11132
11133
11134 // Loop pressure/temperature:
11135 for ( Index i = 0 ; i < n_p ; ++i )
11136 {
11137 Numeric Tave = abs_t[i]; // [K]
11138 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
11139 // FIXME Numeric vmrco2 = vmr[i]; // [1]
11140 Numeric Rhoave = (Pave/PO) * (TO/Tave); // [hPa]
11141 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
11142 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
11143
11144
11145 // Molecular cross section calculated by CKD.
11146 // The cross sectionis calculated on the predefined
11147 // CKD wavenumber grid.
11148 Vector k(NPTC+addF77fields, 0.); // [1/cm]
11149 for (Index J = 1 ; J <= NPTC ; ++J)
11150 {
11151 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
11152 Numeric FCO2 = FCO2T0[J];
11153 const Index I1J = I1 + J-1;
11154
11155// CKD MT 2.0 This continuum differs from mt_ck_1.3 in that an entirely
11156// new co2 continuum has been developed based on the line coupling parameters from
11157// Hartmann's group as distributed with hitran. This continuum must be used with lblrtm_v11
11158// and spectral line parameters including Hartmann's line parameters for co2.
11159// Based on recent validation studies, a scaling of the continuum for v3 is required to achieve an acceptable result
11160// at 2385 cm-1, the 'bandhead' of v3. Clough et al., presentation at EGU 2007
11161
11162
11163 if ( (I1J >= 1196) && (I1J <= 1220) )
11164 {
11165 FCO2 = pow( (Tave/246.0e0), tdep_bandhead[I1J-1196] ) * FCO2;
11166 }
11167// CKD MT 2.5 Adjustment to the original scaling made (temperature dependece added)
11168 if ( (VJ > 2000.0e0) && (VJ < 2998.0e0) )
11169 {
11170 int JFAC = int( (VJ - 1998.00e0)/2.00e0 + 0.00001e0) ;
11171 FCO2 = XfacCO2[JFAC] * FCO2;
11172 }
11173
11174
11175 // CKD cross section times number density with radiative field [1]
11176 // the VMRCO2 will be multiplied in abs_coefCalc
11177 k[J] = ((WTOT * Rhoave) * (FCO2*1.000e-20) * RADFN_FUN(VJ,XKT));
11178
11179 }
11180
11181
11182 // Loop input frequency array. The previously calculated cross section
11183 // has therefore to be interpolated on the input frequencies.
11184 for ( Index s = 0 ; s < n_f ; ++s )
11185 {
11186 // calculate the associated wave number (= 1/wavelength)
11187 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11188 if ( (V > 0.000e0) && (V < FCO2_ckd_mt_250_v2) )
11189 {
11190 // arts cross section [1/m]
11191 // interpolate the k vector on the f_grid grid
11192 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
11193 }
11194 }
11195 }
11196
11197}
11198
11199// =================================================================================
11200//! CKD version MT 1.00 N2-N2 collision induced absorption (rotational band)
11201/*!
11202 Model reference:
11203 Borysow, A, and L. Frommhold,
11204 "Collision-induced rototranslational absorption spectra of N2-N2
11205 pairs for temperatures from 50 to 300 K", The
11206 Astrophysical Journal, 311, 1043-1057, 1986.
11207
11208 \param[out] pxsec cross section (absorption/volume mixing ratio) of
11209 N2-N2 CIA rot. band according to CKD_MT 1.00 [1/m]
11210 \param Cin strength scaling factor [1]
11211 \param model allows user defined input parameter set
11212 (Cin)<br>
11213 or choice of
11214 pre-defined parameters of specific models (see note below).
11215 \param f_grid predefined frequency grid [Hz]
11216 \param abs_p predefined pressure grid [Pa]
11217 \param abs_t predefined temperature grid [K]
11218 \param vmr N2 volume mixing ratio profile [1]
11219
11220 \remark Borysow, A, and L. Frommhold,<br>
11221 Collision-induced rototranslational absorption spectra of N2-N2
11222 pairs for temperatures from 50 to 300 K,<br>
11223 The Astrophysical Journal, 311, 1043-1057, 1986.
11224
11225 \note This absorption model is taken from the FORTRAN77 code of
11226 CKD_MT version 1.00 written by<br>
11227 Atmospheric and Environmental Research Inc. (AER),<br>
11228 Radiation and Climate Group<br>
11229 131 Hartwell Avenue<br>
11230 Lexington, MA 02421, USA<br>
11231 http://www.rtweb.aer.com/continuum_frame.html
11232
11233 \author Thomas Kuhn
11234 \date 2002-28-08
11235 */
11236void CKD_mt_CIArot_n2 (MatrixView pxsec,
11237 const Numeric Cin,
11238 const String& model,
11239 ConstVectorView f_grid,
11240 ConstVectorView abs_p,
11241 ConstVectorView abs_t,
11242 ConstVectorView vmr,
11243 const Verbosity& verbosity)
11244{
11245 CREATE_OUT3ArtsOut3 out3(verbosity);
11246
11247 // check the model name about consistency
11248 if ((model != "user") && (model != "CKDMT100"))
11249 {
11250 ostringstream os;
11251 os << "!!ERROR!!\n"
11252 << "CKD_MT1.00 N2 CIA rotational band:\n"
11253 << "INPUT model name is: " << model << ".\n"
11254 << "VALID model names are user and CKDMT100\n";
11255 throw runtime_error(os.str());
11256 }
11257
11258
11259 // scaling factor of the N2-N2 CIA rot. band absorption
11260 Numeric ScalingFac = 0.0000e0;
11261 if ( model == "user" )
11262 {
11263 ScalingFac = Cin; // input scaling factor of calculated absorption
11264 }
11265 else
11266 {
11267 ScalingFac = 1.0000e0;
11268 }
11269
11270 const Index n_p = abs_p.nelem(); // Number of pressure levels
11271 const Index n_f = f_grid.nelem(); // Number of frequencies
11272
11273
11274 // Check that dimensions of abs_p, abs_t, and vmr agree:
11275 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11275
, "n_p==abs_t.nelem()") : (void)0)
;
11276 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11276
, "n_p==vmr.nelem()") : (void)0)
;
11277
11278 // Check that dimensions of pxsec are consistent with n_f
11279 // and n_p. It should be [n_f,n_p]:
11280 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11280
, "n_f==pxsec.nrows()") : (void)0)
;
11281 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11281
, "n_p==pxsec.ncols()") : (void)0)
;
11282
11283
11284 // ************************** CKD stuff ************************************
11285
11286 // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
11287 const Numeric T1 = 273.0e0;
11288 const Numeric TO = 296.0e0;
11289 const Numeric PO = 1013.0e0;
11290
11291
11292 // wavenumber range where CKD H2O self continuum is valid
11293 const Numeric VABS_min = -1.000e1; // [cm^-1]
11294 const Numeric VABS_max = 3.500e2; // [cm^-1]
11295
11296
11297 // It is assumed here that f_grid is monotonically increasing with index!
11298 // In future change this return into a change of the loop over
11299 // the frequency f_grid. n_f_new < n_f
11300 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11301 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11302 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
11303 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
11304 {
11305 out3 << "WARNING:\n"
11306 << " CKD_MT 1.00 N2-N2 CIA rotational band:\n"
11307 << " input frequency vector exceeds range of model validity\n"
11308 << " " << N2N2_CT296_ckd_mt_100_v1 << "<->" << N2N2_CT220_ckd_mt_100_v2 << "cm^-1\n";
11309 }
11310
11311
11312 // ------------------- subroutine N2R296/N2R220 ----------------------------
11313
11314 if (N2N2_CT296_ckd_mt_100_v1 != N2N2_CT220_ckd_mt_100_v1)
11315 {
11316 ostringstream os;
11317 os << "!!ERROR!!\n"
11318 << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
11319 << "parameter V1 not the same for different ref. temperatures.\n";
11320 throw runtime_error(os.str());
11321 }
11322 if (N2N2_CT296_ckd_mt_100_v2 != N2N2_CT220_ckd_mt_100_v2)
11323 {
11324 ostringstream os;
11325 os << "!!ERROR!!\n"
11326 << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
11327 << "parameter V2 not the same for different ref. temperatures.\n";
11328 throw runtime_error(os.str());
11329 }
11330 if (N2N2_CT296_ckd_mt_100_dv != N2N2_CT220_ckd_mt_100_dv)
11331 {
11332 ostringstream os;
11333 os << "!!ERROR!!\n"
11334 << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
11335 << "parameter DV not the same for different ref. temperatures.\n";
11336 throw runtime_error(os.str());
11337 }
11338 if (N2N2_CT296_ckd_mt_100_npt != N2N2_CT220_ckd_mt_100_npt)
11339 {
11340 ostringstream os;
11341 os << "!!ERROR!!\n"
11342 << "CKD_MT 1.00 N2-N2 CIA rotational band:\n"
11343 << "parameter NPT not the same for different ref. temperatures.\n";
11344 throw runtime_error(os.str());
11345 }
11346
11347 // retrieve the appropriate array sequence of the self continuum
11348 // arrays of the CKD model.
11349 Numeric DVC = N2N2_CT296_ckd_mt_100_dv;
11350 Numeric V1C = V1ABS - DVC;
11351 Numeric V2C = V2ABS + DVC;
11352
11353 int I1 = (int) ((V1C-N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
11354 if (V1C < N2N2_CT296_ckd_mt_100_v1) I1 = -1;
11355 V1C = N2N2_CT296_ckd_mt_100_v1 + (N2N2_CT296_ckd_mt_100_dv * (Numeric)I1);
11356
11357 int I2 = (int) ((V2C-N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
11358
11359 int NPTC = I2-I1+3;
11360 if (NPTC > N2N2_CT296_ckd_mt_100_npt) NPTC = N2N2_CT296_ckd_mt_100_npt+1;
11361
11362 V2C = V1C + N2N2_CT296_ckd_mt_100_dv * (Numeric)(NPTC-1);
11363
11364 if (NPTC < 1)
11365 {
11366 out3 << "WARNING:\n"
11367 << " CKD_MT 1.00 N2-N2 CIA rotational band:\n"
11368 << " no elements of internal continuum coefficients could be found for the\n"
11369 << " input frequency range.\n"
11370 << " Leave the function without calculating the absorption.\n";
11371 return;
11372 }
11373
11374 Vector C0(NPTC+addF77fields, 0.); // [cm^3/molecules]
11375 Vector C1(NPTC+addF77fields, 0.); // [cm^3/molecules]
11376
11377 for (Index J = 1 ; J <= NPTC ; ++J)
11378 {
11379 Index I = I1+J;
11380 if ( (I > 0) && (I <= N2N2_CT296_ckd_mt_100_npt) )
11381 {
11382 C0[J] = N2N2_CT296_ckd_mt_100[I]; // at T=296 K
11383 C1[J] = N2N2_CT220_ckd_mt_100[I]; // at T=260 K
11384 }
11385 }
11386
11387 // ------------------- subroutine N2R296/N2R220 ----------------------------
11388
11389
11390
11391
11392 // Loop pressure/temperature:
11393 for ( Index i = 0 ; i < n_p ; ++i )
11394 {
11395 Numeric Tave = abs_t[i]; // [K]
11396 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
11397 Numeric vmrn2 = vmr[i]; // [1]
11398 Numeric facfac = vmrn2 * (Pave/PO) * (Pave/PO) *
11399 (T1/Tave) * (T1/Tave);
11400
11401 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
11402 Numeric Tfac = (Tave - TO) / (220.0e0 - TO);
11403
11404 // Molecular cross section calculated by CKD.
11405 // The cross sectionis calculated on the predefined
11406 // CKD wavenumber grid.
11407 Vector k(NPTC+addF77fields, 0.); // [1/cm]
11408 for (Index J = 1 ; J <= NPTC ; ++J)
11409 {
11410 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
11411 Numeric SN2 = 0.000e0;
11412 if ( (C0[J] > 0.000e0) && (C1[J] > 0.000e0) )
11413 {
11414 SN2 = facfac* C0[J] * pow( (C1[J]/C0[J]), Tfac );
11415 }
11416
11417 // CKD cross section with radiative field
11418 k[J] = SN2 * RADFN_FUN(VJ,XKT); // [1]
11419 }
11420
11421
11422 // Loop input frequency array. The previously calculated cross section
11423 // has therefore to be interpolated on the input frequencies.
11424 for ( Index s = 0 ; s < n_f ; ++s )
11425 {
11426 // calculate the associated wave number (= 1/wavelength)
11427 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11428 if ( (V > 0.000e0) && (V < N2N2_CT220_ckd_mt_100_v2) )
11429 {
11430 // arts cross section [1/m]
11431 // interpolate the k vector on the f_grid grid
11432 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
11433 }
11434 }
11435 }
11436
11437}
11438
11439// =================================================================================
11440
11441//! CKD version MT 1.00 N2-N2 collision induced absorption (fundamental band)
11442/*!
11443 Model reference:
11444 version_1 of the Nitrogen Collision Induced Fundamental
11445 Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and
11446 J._M. Hartmann, Infrared collision-induced absorption by
11447 N2 near 4.3 microns for atmospheric applications:
11448 Measurements and emprirical modeling, Appl. Optics, 35,
11449 5911-5917, (1996).
11450
11451 \param[out] pxsec cross section (absorption/volume mixing ratio) of
11452 N2-N2 CIA fundamental band according to CKD_MT 1.00 [1/m]
11453 \param Cin strength scaling factor [1]
11454 \param model allows user defined input parameter set
11455 (Cin)<br>
11456 or choice of
11457 pre-defined parameters of specific models (see note below).
11458 \param f_grid predefined frequency grid [Hz]
11459 \param abs_p predefined pressure grid [Pa]
11460 \param abs_t predefined temperature grid [K]
11461 \param vmr N2 volume mixing ratio profile [1]
11462
11463 \remark Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and
11464 J._M. Hartmann,<br>
11465 Infrared collision-induced absorption by
11466 N2 near 4.3 microns for atmospheric applications:
11467 Measurements and emprirical modeling, <br>
11468 Appl. Optics, 35, 5911-5917, (1996)
11469
11470 \note This absorption model is taken from the FORTRAN77 code of
11471 CKD_MT version 1.00 written by<br>
11472 Atmospheric and Environmental Research Inc. (AER),<br>
11473 Radiation and Climate Group<br>
11474 131 Hartwell Avenue<br>
11475 Lexington, MA 02421, USA<br>
11476 http://www.rtweb.aer.com/continuum_frame.html
11477
11478
11479 \author Thomas Kuhn
11480 \date 2002-28-08
11481 */
11482void CKD_mt_CIAfun_n2 (MatrixView pxsec,
11483 const Numeric Cin,
11484 const String& model,
11485 ConstVectorView f_grid,
11486 ConstVectorView abs_p,
11487 ConstVectorView abs_t,
11488 ConstVectorView vmr,
11489 const Verbosity& verbosity)
11490{
11491 CREATE_OUT3ArtsOut3 out3(verbosity);
11492
11493 // check the model name about consistency
11494 if ((model != "user") && (model != "CKDMT100"))
11495 {
11496 ostringstream os;
11497 os << "!!ERROR!!\n"
11498 << "CKD_MT1.00 N2 CIA fundamental band:\n"
11499 << "INPUT model name is: " << model << ".\n"
11500 << "VALID model names are user and CKDMT100\n";
11501 throw runtime_error(os.str());
11502 }
11503
11504
11505 // scaling factor of the N2-N2 CIA fundamental band absorption
11506 Numeric ScalingFac = 1.0000e0;
11507 if ( model == "user" )
11508 {
11509 ScalingFac = Cin; // input scaling factor of calculated absorption
11510 }
11511
11512
11513 const Index n_p = abs_p.nelem(); // Number of pressure levels
11514 const Index n_f = f_grid.nelem(); // Number of frequencies
11515
11516
11517 // Check that dimensions of abs_p, abs_t, and vmr agree:
11518 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11518
, "n_p==abs_t.nelem()") : (void)0)
;
11519 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11519
, "n_p==vmr.nelem()") : (void)0)
;
11520
11521 // Check that dimensions of pxsec are consistent with n_f
11522 // and n_p. It should be [n_f,n_p]:
11523 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11523
, "n_f==pxsec.nrows()") : (void)0)
;
11524 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11524
, "n_p==pxsec.ncols()") : (void)0)
;
11525
11526
11527 // ************************** CKD stuff ************************************
11528
11529 const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
11530 const Numeric T1 = 273.0e0;
11531 const Numeric TO = 296.0e0;
11532 const Numeric PO = 1013.0e0;
11533 const Numeric a1 = 0.8387e0;
11534 const Numeric a2 = 0.0754e0;
11535
11536
11537 // It is assumed here that f_grid is monotonically increasing with index!
11538 // In future change this return into a change of the loop over
11539 // the frequency f_grid. n_f_new < n_f
11540 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11541 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11542 if ( (V1ABS < N2N2_N2F_ckd_mt_100_v1) || (V1ABS > N2N2_N2F_ckd_mt_100_v2) ||
11543 (V2ABS < N2N2_N2F_ckd_mt_100_v1) || (V2ABS > N2N2_N2F_ckd_mt_100_v2) )
11544 {
11545 out3 << "WARNING:\n"
11546 << " CKD_MT 1.00 N2-N2 CIA fundamental band:\n"
11547 << " input frequency vector exceeds range of model validity\n"
11548 << " " << N2N2_N2F_ckd_mt_100_v1 << "<->" << N2N2_N2F_ckd_mt_100_v2 << "cm^-1\n";
11549 }
11550
11551
11552 // ------------------- subroutine N2_VER_1 ----------------------------
11553
11554 // retrieve the appropriate array sequence of the self continuum
11555 // arrays of the CKD model.
11556 Numeric DVC = N2N2_N2F_ckd_mt_100_dv;
11557 Numeric V1C = V1ABS - DVC;
11558 Numeric V2C = V2ABS + DVC;
11559
11560 int I1 = (int) ((V1C-N2N2_N2F_ckd_mt_100_v1) / N2N2_N2F_ckd_mt_100_dv);
11561 if (V1C < N2N2_N2F_ckd_mt_100_v1) I1 = -1;
11562 V1C = N2N2_N2F_ckd_mt_100_v1 + (N2N2_N2F_ckd_mt_100_dv * (Numeric)I1);
11563
11564 int I2 = (int) ((V2C-N2N2_N2F_ckd_mt_100_v1) / N2N2_N2F_ckd_mt_100_dv);
11565
11566 int NPTC = I2-I1+3;
11567 if (NPTC > N2N2_N2F_ckd_mt_100_npt) NPTC = N2N2_N2F_ckd_mt_100_npt+1;
11568
11569 V2C = V1C + N2N2_N2F_ckd_mt_100_dv * (Numeric)(NPTC-1);
11570
11571 if (NPTC < 1)
11572 {
11573 out3 << "WARNING:\n"
11574 << " CKD_MT 1.00 N2-N2 CIA fundamental band:\n"
11575 << " no elements of internal continuum coefficients could be found for the\n"
11576 << " input frequency range.\n";
11577 return;
11578 }
11579
11580 Vector xn2(NPTC+addF77fields, 0.);
11581 Vector xn2t(NPTC+addF77fields, 0.);
11582
11583 for (Index J = 1 ; J <= NPTC ; ++J)
11584 {
11585 Index I = I1+J;
11586 if ( (I > 0) && (I <= N2N2_N2F_ckd_mt_100_npt) )
11587 {
11588 xn2[J] = N2N2_N2F_ckd_mt_100[I];
11589 xn2t[J] = N2N2_N2Ft_ckd_mt_100[I];
11590 }
11591 }
11592
11593 // ------------------- subroutine N2_VER_1 ----------------------------
11594
11595
11596
11597
11598 // Loop pressure/temperature:
11599 for ( Index i = 0 ; i < n_p ; ++i )
11600 {
11601 Numeric Tave = abs_t[i]; // [K]
11602 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
11603 Numeric vmrn2 = vmr[i]; // [1]
11604 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
11605 Numeric tau_fac= WTOT * (Pave/PO) * (T1/Tave);
11606
11607 Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
11608
11609 // FIXME Numeric Tfac = (Tave - TO) / (220.0e0 - TO); // [1]
11610 Numeric xktfac = (1.000e0/TO) - (1.000e0/Tave); // [1/K]
11611 Numeric factor = 0.000e0;
11612 if (vmrn2 > VMRCalcLimit)
11613 {
11614 factor = (1.000e0 / xLosmt) * (1.000e0/vmrn2) * (a1 - a2*(Tave/TO));
11615 }
11616
11617 // Molecular cross section calculated by CKD.
11618 // The cross sectionis calculated on the predefined
11619 // CKD wavenumber grid.
11620 Vector k(NPTC+addF77fields+1, 0.); // [1/cm]
11621 for (Index J = 1 ; J <= NPTC ; ++J)
11622 {
11623 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
11624 Numeric SN2 = 0.000e0;
11625 if (xn2[J] > 0.000e0)
11626 {
11627 Numeric C0 = factor * xn2[J] * exp(xn2t[J]*xktfac) / VJ;
11628 SN2 = tau_fac * C0;
11629 }
11630
11631 // CKD cross section with radiative field
11632 k[J] = SN2 * RADFN_FUN(VJ,XKT); // [1/cm]
11633 }
11634
11635
11636 // Loop input frequency array. The previously calculated cross section
11637 // has therefore to be interpolated on the input frequencies.
11638 for ( Index s = 0 ; s < n_f ; ++s )
11639 {
11640 // calculate the associated wave number (= 1/wavelength)
11641 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11642 if ( (V > N2N2_N2F_ckd_mt_100_v1) && (V < N2N2_N2F_ckd_mt_100_v2) )
11643 {
11644 // arts cross section [1/m]
11645 // interpolate the k vector on the f_grid grid
11646 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
11647 }
11648 }
11649 }
11650
11651}
11652// =================================================================================
11653//! CKD version MT 2.50 N2-N2 collision induced absorption (rotational band)
11654/*!
11655 Model reference:
11656 Borysow, A, and L. Frommhold,
11657 "Collision-induced rototranslational absorption spectra of N2-N2
11658 pairs for temperatures from 50 to 300 K", The
11659 Astrophysical Journal, 311, 1043-1057, 1986.
11660
11661 Updated 2014/06/26 based on:
11662
11663 Boissoles, J., C. Boulet, R.H. Tipping, A. Brown and Q. Ma,
11664 "Theoretical CAlculations of the Translation-Rotation
11665 Collision-Induced Absorption in N2-N2, O2-O2 and N2-O2 Pairs",
11666 J.Quant. Spec. Rad. Transfer, 82,505 (2003).
11667
11668 \param[out] pxsec cross section (absorption/volume mixing ratio) of
11669 N2-N2 CIA rot. band according to CKD_MT 1.00 [1/m]
11670 \param Cin strength scaling factor [1]
11671 \param model allows user defined input parameter set
11672 (Cin)<br>
11673 or choice of
11674 pre-defined parameters of specific models (see note below).
11675 \param f_grid predefined frequency grid [Hz]
11676 \param abs_p predefined pressure grid [Pa]
11677 \param abs_t predefined temperature grid [K]
11678 \param vmr1 N2 volume mixing ratio profile [1]
11679 \param vmr2 O2 volume mixing ratio profile [1]
11680 \param vmr3 H2O volume mixing ratio profile [1]
11681 \remark Borysow, A, and L. Frommhold,<br>
11682 Collision-induced rototranslational absorption spectra of N2-N2
11683 pairs for temperatures from 50 to 300 K,<br>
11684 The Astrophysical Journal, 311, 1043-1057, 1986.
11685
11686 \note This absorption model is taken from the FORTRAN77 code of
11687 CKD_MT version 2.50 written by<br>
11688 Atmospheric and Environmental Research Inc. (AER),<br>
11689 Radiation and Climate Group<br>
11690 131 Hartwell Avenue<br>
11691 Lexington, MA 02421, USA<br>
11692 http://www.rtweb.aer.com/continuum_frame.html
11693
11694 \author Mayuri Tatiya
11695 \date 2014-27-06
11696 */
11697void CKD_mt_250_CIArot_n2 (MatrixView pxsec,
11698 const Numeric Cin,
11699 const String& model,
11700 ConstVectorView f_grid,
11701 ConstVectorView abs_p,
11702 ConstVectorView abs_t,
11703 ConstVectorView vmr,
11704 ConstVectorView abs_h2o,
11705 ConstVectorView abs_o2,
11706 const Verbosity& verbosity)
11707{
11708 CREATE_OUT3ArtsOut3 out3(verbosity);
11709
11710 // check the model name about consistency
11711 if ((model != "user") && (model != "CKDMT252"))
11712 {
11713 ostringstream os;
11714 os << "!!ERROR!!\n"
11715 << "CKD_MT2.50 N2 CIA rotational band:\n"
11716 << "INPUT model name is: " << model << ".\n"
11717 << "VALID model names are user and CKDMT252\n";
11718 throw runtime_error(os.str());
11719 }
11720
11721
11722 // scaling factor of the N2-N2 CIA rot. band absorption
11723 Numeric ScalingFac = 0.0000e0;
11724 if ( model == "user" )
11725 {
11726 ScalingFac = Cin; // input scaling factor of calculated absorption
11727 }
11728 else
11729 {
11730 ScalingFac = 1.0000e0;
11731 }
11732
11733 const Index n_p = abs_p.nelem(); // Number of pressure levels
11734 const Index n_f = f_grid.nelem(); // Number of frequencies
11735
11736
11737 // Check that dimensions of abs_p, abs_t, and vmr agree:
11738 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11738
, "n_p==abs_t.nelem()") : (void)0)
;
11739 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11739
, "n_p==vmr.nelem()") : (void)0)
;
11740
11741 // Check that dimensions of pxsec are consistent with n_f
11742 // and n_p. It should be [n_f,n_p]:
11743 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11743
, "n_f==pxsec.nrows()") : (void)0)
;
11744 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11744
, "n_p==pxsec.ncols()") : (void)0)
;
11745
11746
11747 // ************************** CKD stuff ************************************
11748
11749 // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
11750 const Numeric T1 = 273.0e0;
11751 const Numeric TO = 296.0e0;
11752 const Numeric PO = 1013.0e0;
11753
11754
11755 // wavenumber range where CKD H2O self continuum is valid
11756 const Numeric VABS_min = -1.000e1; // [cm^-1]
11757 const Numeric VABS_max = 3.500e2; // [cm^-1]
11758
11759
11760 // It is assumed here that f_grid is monotonically increasing with index!
11761 // In future change this return into a change of the loop over
11762 // the frequency f_grid. n_f_new < n_f
11763 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11764 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11765 if ( (V1ABS < VABS_min) || (V1ABS > VABS_max) ||
11766 (V2ABS < VABS_min) || (V2ABS > VABS_max) )
11767 {
11768 out3 << "WARNING:\n"
11769 << " CKD_MT 2.50 N2-N2 CIA rotational band:\n"
11770 << " input frequency vector exceeds range of model validity\n"
11771 << " " << N2N2_CT296_ckd_mt_100_v1 << "<->" << N2N2_CT220_ckd_mt_100_v2 << "cm^-1\n";
11772 }
11773
11774
11775 // ------------------- subroutine N2R296/N2R220 ----------------------------
11776
11777 if (N2N2_CT296_ckd_mt_100_v1 != N2N2_CT220_ckd_mt_100_v1)
11778 {
11779 ostringstream os;
11780 os << "!!ERROR!!\n"
11781 << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
11782 << "parameter V1 not the same for different ref. temperatures.\n";
11783 throw runtime_error(os.str());
11784 }
11785 if (N2N2_CT296_ckd_mt_100_v2 != N2N2_CT220_ckd_mt_100_v2)
11786 {
11787 ostringstream os;
11788 os << "!!ERROR!!\n"
11789 << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
11790 << "parameter V2 not the same for different ref. temperatures.\n";
11791 throw runtime_error(os.str());
11792 }
11793 if (N2N2_CT296_ckd_mt_100_dv != N2N2_CT220_ckd_mt_100_dv)
11794 {
11795 ostringstream os;
11796 os << "!!ERROR!!\n"
11797 << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
11798 << "parameter DV not the same for different ref. temperatures.\n";
11799 throw runtime_error(os.str());
11800 }
11801 if (N2N2_CT296_ckd_mt_100_npt != N2N2_CT220_ckd_mt_100_npt)
11802 {
11803 ostringstream os;
11804 os << "!!ERROR!!\n"
11805 << "CKD_MT 2.50 N2-N2 CIA rotational band:\n"
11806 << "parameter NPT not the same for different ref. temperatures.\n";
11807 throw runtime_error(os.str());
11808 }
11809
11810 // retrieve the appropriate array sequence of the self continuum
11811 // arrays of the CKD model.
11812 Numeric DVC = N2N2_CT296_ckd_mt_100_dv;
11813 Numeric V1C = V1ABS - DVC;
11814 Numeric V2C = V2ABS + DVC;
11815
11816 int I1 = (int) ((V1C-N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
11817 if (V1C < N2N2_CT296_ckd_mt_100_v1) I1 = -1;
11818 V1C = N2N2_CT296_ckd_mt_100_v1 + (N2N2_CT296_ckd_mt_100_dv * (Numeric)I1);
11819
11820 int I2 = (int) ((V2C-N2N2_CT296_ckd_mt_100_v1) / N2N2_CT296_ckd_mt_100_dv);
11821
11822 int NPTC = I2-I1+3;
11823 if (NPTC > N2N2_CT296_ckd_mt_100_npt) NPTC = N2N2_CT296_ckd_mt_100_npt+1;
11824
11825 V2C = V1C + N2N2_CT296_ckd_mt_100_dv * (Numeric)(NPTC-1);
11826
11827 if (NPTC < 1)
11828 {
11829 out3 << "WARNING:\n"
11830 << " CKD_MT 2.50 N2-N2 CIA rotational band:\n"
11831 << " no elements of internal continuum coefficients could be found for the\n"
11832 << " input frequency range.\n"
11833 << " Leave the function without calculating the absorption.\n";
11834 return;
11835 }
11836
11837 Vector C0(NPTC+addF77fields, 0.); // [cm^3/molecules]
11838 Vector C1(NPTC+addF77fields, 0.); // [cm^3/molecules]
11839 Vector sf_T0(NPTC+addF77fields, 0.);
11840 Vector sf_T1(NPTC+addF77fields, 0.);
11841 for (Index J = 1 ; J <= NPTC ; ++J)
11842 {
11843 Index I = I1+J;
11844 if ( (I > 0) && (I <= N2N2_CT296_ckd_mt_100_npt) )
11845 {
11846 C0[J] = N2N2_CT296_ckd_mt_100[I]; // at T=296 K
11847 sf_T0[J] = N2N2_sf_296_ckd_mt_100[I];
11848 C1[J] = N2N2_CT220_ckd_mt_100[I]; // at T=260 K
11849 sf_T1[J] = N2N2_sf_220_ckd_mt_100[I];
11850 }
11851 }
11852
11853 // ------------------- subroutine N2R296/N2R220 ----------------------------
11854
11855
11856
11857
11858 // Loop pressure/temperature:
11859 for ( Index i = 0 ; i < n_p ; ++i )
11860 {
11861 Numeric Tave = abs_t[i]; // [K]
11862 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
11863 Numeric vmrn2 = vmr[i]; // [1]
11864 Numeric vmro2 = abs_o2[i];
11865 Numeric vmrh2o = abs_h2o[i];
11866 Numeric facfac = vmrn2 * (Pave/PO) * (Pave/PO) *
11867 (T1/Tave) * (T1/Tave);
11868
11869 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
11870 Numeric Tfac = (Tave - TO) / (220.0e0 - TO);
11871
11872 // Molecular cross section calculated by CKD.
11873 // The cross sectionis calculated on the predefined
11874 // CKD wavenumber grid.
11875 Vector k(NPTC+addF77fields, 0.); // [1/cm]
11876 Numeric C = 0.000e0;
11877 Numeric sf = 0.000e0;
11878 for (Index J = 1 ; J <= NPTC ; ++J)
11879 {
11880 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
11881 Numeric SN2 = 0.000e0;
11882 if ( (C0[J] > 0.000e0) && (C1[J] > 0.000e0) )
11883 {
11884 C = C0[J] * pow( (C1[J]/C0[J]), Tfac );
11885 sf = ((sf_T0[J] * pow( (sf_T1[J]/sf_T0[J]), Tfac ))-1.000e0)*(0.79/0.21);
11886 SN2 = facfac * C * (vmrn2 + sf * vmro2 + vmrh2o);
11887 }
11888// sf is ~ the ratio of alpha(n2-o2)/alpha(n2-n2)
11889// Eq's 7 and 8 in the Boissoles paper.
11890// if ( (C0[J] > 0.000e0) && (C1[J] > 0.000e0) )
11891// {
11892// SN2 = facfac* C0[J] * pow( (C1[J]/C0[J]), Tfac );
11893// }
11894
11895 // CKD cross section with radiative field
11896 k[J] = SN2 * RADFN_FUN(VJ,XKT); // [1]
11897 }
11898
11899
11900 // Loop input frequency array. The previously calculated cross section
11901 // has therefore to be interpolated on the input frequencies.
11902 for ( Index s = 0 ; s < n_f ; ++s )
11903 {
11904 // calculate the associated wave number (= 1/wavelength)
11905 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
11906 if ( (V > 0.000e0) && (V < N2N2_CT220_ckd_mt_100_v2) )
11907 {
11908 // arts cross section [1/m]
11909 // interpolate the k vector on the f_grid grid
11910 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
11911 }
11912 }
11913 }
11914
11915}
11916
11917// =================================================================================
11918
11919//! CKD version MT 2.50 N2-N2 collision induced absorption (fundamental band)
11920/*!
11921 Model reference:
11922 version_1 of the Nitrogen Collision Induced Fundamental
11923 Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and
11924 J._M. Hartmann, Infrared collision-induced absorption by
11925 N2 near 4.3 microns for atmospheric applications:
11926 Measurements and emprirical modeling, Appl. Optics, 35,
11927 5911-5917, (1996).
11928
11929 \param[out] pxsec cross section (absorption/volume mixing ratio) of
11930 N2-N2 CIA fundamental band according to CKD_MT 1.00 [1/m]
11931 \param Cin strength scaling factor [1]
11932 \param model allows user defined input parameter set
11933 (Cin)<br>
11934 or choice of
11935 pre-defined parameters of specific models (see note below).
11936 \param f_grid predefined frequency grid [Hz]
11937 \param abs_p predefined pressure grid [Pa]
11938 \param abs_t predefined temperature grid [K]
11939 \param vmr N2 volume mixing ratio profile [1]
11940
11941 \remark Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and
11942 J._M. Hartmann,<br>
11943 Infrared collision-induced absorption by
11944 N2 near 4.3 microns for atmospheric applications:
11945 Measurements and emprirical modeling, <br>
11946 Appl. Optics, 35, 5911-5917, (1996)
11947
11948 \note This absorption model is taken from the FORTRAN77 code of
11949 CKD_MT version 1.00 written by<br>
11950 Atmospheric and Environmental Research Inc. (AER),<br>
11951 Radiation and Climate Group<br>
11952 131 Hartwell Avenue<br>
11953 Lexington, MA 02421, USA<br>
11954 http://www.rtweb.aer.com/continuum_frame.html
11955
11956
11957 \author Mayuri Tatiya
11958 \date 2014-27-06
11959 */
11960void CKD_mt_250_CIAfun_n2 (MatrixView pxsec,
11961 const Numeric Cin,
11962 const String& model,
11963 ConstVectorView f_grid,
11964 ConstVectorView abs_p,
11965 ConstVectorView abs_t,
11966 ConstVectorView vmr,
11967 ConstVectorView abs_h2o,
11968 ConstVectorView abs_o2,
11969 const Verbosity& verbosity)
11970{
11971 CREATE_OUT3ArtsOut3 out3(verbosity);
11972
11973 // check the model name about consistency
11974 if ((model != "user") && (model != "CKDMT252"))
11975 {
11976 ostringstream os;
11977 os << "!!ERROR!!\n"
11978 << "CKD_MT2.50 N2 CIA fundamental band:\n"
11979 << "INPUT model name is: " << model << ".\n"
11980 << "VALID model names are user and CKDMT252\n";
11981 throw runtime_error(os.str());
11982 }
11983
11984
11985 // scaling factor of the N2-N2 CIA fundamental band absorption
11986 Numeric ScalingFac = 1.0000e0;
11987 if ( model == "user" )
11988 {
11989 ScalingFac = Cin; // input scaling factor of calculated absorption
11990 }
11991
11992
11993 const Index n_p = abs_p.nelem(); // Number of pressure levels
11994 const Index n_f = f_grid.nelem(); // Number of frequencies
11995
11996
11997 // Check that dimensions of abs_p, abs_t, and vmr agree:
11998 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11998
, "n_p==abs_t.nelem()") : (void)0)
;
11999 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 11999
, "n_p==vmr.nelem()") : (void)0)
;
12000
12001 // Check that dimensions of pxsec are consistent with n_f
12002 // and n_p. It should be [n_f,n_p]:
12003 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12003
, "n_f==pxsec.nrows()") : (void)0)
;
12004 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12004
, "n_p==pxsec.ncols()") : (void)0)
;
12005
12006
12007 // ************************** CKD stuff ************************************
12008
12009 const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
12010 const Numeric T1 = 273.0e0;
12011 // const Numeric TO = 296.0e0;
12012 const Numeric PO = 1013.0e0;
12013
12014 // It is assumed here that f_grid is monotonically increasing with index!
12015 // In future change this return into a change of the loop over
12016 // the frequency f_grid. n_f_new < n_f
12017 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12018 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12019 if ( (V1ABS < N2N2_N2F_ckd_mt_250_v1) || (V1ABS > N2N2_N2F_ckd_mt_250_v2) ||
12020 (V2ABS < N2N2_N2F_ckd_mt_250_v1) || (V2ABS > N2N2_N2F_ckd_mt_250_v2) )
12021 {
12022 out3 << "WARNING:\n"
12023 << " CKD_MT 2.50 N2-N2 CIA fundamental band:\n"
12024 << " input frequency vector exceeds range of model validity\n"
12025 << " " << N2N2_N2F_ckd_mt_250_v1 << "<->" << N2N2_N2F_ckd_mt_250_v2 << "cm^-1\n";
12026 }
12027
12028
12029 // ------------------- subroutine N2_VER_1 ----------------------------
12030
12031 // retrieve the appropriate array sequence of the self continuum
12032 // arrays of the CKD model.
12033 Numeric DVC = N2N2_N2F_ckd_mt_250_dv;
12034 Numeric V1C = V1ABS - DVC;
12035 Numeric V2C = V2ABS + DVC;
12036
12037 int I1 = (int) ((V1C-N2N2_N2F_ckd_mt_250_v1) / N2N2_N2F_ckd_mt_250_dv);
12038 if (V1C < N2N2_N2F_ckd_mt_250_v1) I1 = -1;
12039 V1C = N2N2_N2F_ckd_mt_250_v1 + (N2N2_N2F_ckd_mt_250_dv * (Numeric)I1);
12040
12041 int I2 = (int) ((V2C-N2N2_N2F_ckd_mt_250_v1) / N2N2_N2F_ckd_mt_250_dv);
12042
12043 int NPTC = I2-I1+3;
12044 if (NPTC > N2N2_N2F_ckd_mt_250_npt) NPTC = N2N2_N2F_ckd_mt_250_npt+1;
12045
12046 V2C = V1C + N2N2_N2F_ckd_mt_250_dv * (Numeric)(NPTC-1);
12047
12048 if (NPTC < 1)
12049 {
12050 out3 << "WARNING:\n"
12051 << " CKD_MT 2.50 N2-N2 CIA fundamental band:\n"
12052 << " no elements of internal continuum coefficients could be found for the\n"
12053 << " input frequency range.\n";
12054 return;
12055 }
12056
12057 Vector xn2(NPTC+addF77fields, 0.);
12058 Vector xn2t(NPTC+addF77fields, 0.);
12059
12060 for (Index J = 1 ; J <= NPTC ; ++J)
12061 {
12062 Index I = I1+J;
12063 if ( (I > 0) && (I <= N2N2_N2F_ckd_mt_250_npt) )
12064 {
12065 xn2[J] = N2N2_N2F_ckd_mt_250[I];
12066 xn2t[J] = N2N2_N2Ft_ckd_mt_250[I];
12067 }
12068 }
12069
12070 // ------------------- subroutine N2_VER_1 ----------------------------
12071
12072
12073
12074
12075 // Loop pressure/temperature:
12076 for ( Index i = 0 ; i < n_p ; ++i )
12077 {
12078 Numeric Tave = abs_t[i]; // [K]
12079 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
12080 Numeric vmrn2 = vmr[i]; // [1]
12081 Numeric vmro2 = abs_o2[i]; // [1]
12082 Numeric vmrh2o = abs_h2o[i]; // [1]
12083 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
12084 Numeric tau_fac= WTOT * (Pave/PO) * (T1/Tave);
12085 Numeric a_o2 = 1.294 - 0.4545*Tave/296.00e0;
12086 Numeric a_h2o = 1.00e0;
12087 Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
12088
12089 // FIXME Numeric Tfac = (Tave - TO) / (220.0e0 - TO); // [1]
12090 Numeric xktfac = ((1.000e0/Tave)-(1.000e0/272))/((1.000e0/228)-(1.000e0/272)); // [1/K]
12091 Numeric xt_lin = (Tave-272)/(228-272); // [K]
12092 Numeric factor = 0.000e0;
12093 if (vmrn2 > VMRCalcLimit)
12094 {
12095 factor = (1.000e0 / xLosmt) * (vmrn2+a_o2*vmro2+a_h2o*vmrh2o);
12096 }
12097
12098 // Molecular cross section calculated by CKD.
12099 // The cross sectionis calculated on the predefined
12100 // CKD wavenumber grid.
12101 Vector k(NPTC+addF77fields+1, 0.); // [1/cm]
12102 Vector C0(NPTC+addF77fields+1, 0.);
12103 for (Index J = 1 ; J <= NPTC ; ++J)
12104 {
12105 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
12106 Numeric SN2 = 0.000e0;
12107 if ( (xn2[J] > 0.000e0) && (xn2t[J] > 0.000e0))
12108 {
12109 C0[J] = factor * xn2[J] * pow((xn2t[J]/xn2[J]), xktfac) / VJ;
12110 SN2 = tau_fac * C0[J];
12111 }
12112 else
12113 {
12114 C0[J] = factor * (xn2[J] + (xn2t[J]-xn2[J])*xt_lin) / VJ;
12115 SN2 = tau_fac * C0[J];
12116 }
12117 // CKD cross section with radiative field
12118 k[J] = SN2 * RADFN_FUN(VJ,XKT); // [1/cm]
12119 }
12120
12121
12122 // Loop input frequency array. The previously calculated cross section
12123 // has therefore to be interpolated on the input frequencies.
12124 for ( Index s = 0 ; s < n_f ; ++s )
12125 {
12126 // calculate the associated wave number (= 1/wavelength)
12127 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12128 if ( (V > N2N2_N2F_ckd_mt_250_v1) && (V < N2N2_N2F_ckd_mt_250_v2) )
12129 {
12130 // arts cross section [1/m]
12131 // interpolate the k vector on the f_grid grid
12132 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
12133 }
12134 }
12135 }
12136
12137}
12138// =================================================================================
12139
12140//! CKD version MT 1.00 O2-O2 collision induced absorption (fundamental band)
12141/*!
12142 Model reference:
12143 F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
12144 J.-M. Hartmann, Ch. Boulet,
12145 "Infrared collision-induced absorption by O2 near 6.4 microns for
12146 atmospheric applications: measurements and emprirical modeling",
12147 Appl. Optics, 35, 5911-5917, (1996).
12148
12149 \param[out] pxsec cross section (absorption/volume mixing ratio) of
12150 O2-O2 CIA fundamental band according to CKD_MT 1.00 [1/m]
12151 \param Cin strength scaling factor [1]
12152 \param model allows user defined input parameter set
12153 (Cin)<br>
12154 or choice of
12155 pre-defined parameters of specific models (see note below).
12156 \param f_grid predefined frequency grid [Hz]
12157 \param abs_p predefined pressure grid [Pa]
12158 \param abs_t predefined temperature grid [K]
12159 \param vmr O2 volume mixing ratio profile [1]
12160
12161 \remark F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
12162 J.-M. Hartmann, Ch. Boulet,<br>
12163 Infrared collision-induced absorption by O2 near 6.4 microns for
12164 atmospheric applications: measurements and emprirical modeling,<br>
12165 Appl. Optics, 35, 5911-5917, (1996).
12166
12167 \note This absorption model is taken from the FORTRAN77 code of
12168 CKD_MT version 1.00 written by<br>
12169 Atmospheric and Environmental Research Inc. (AER),<br>
12170 Radiation and Climate Group<br>
12171 131 Hartwell Avenue<br>
12172 Lexington, MA 02421, USA<br>
12173 http://www.rtweb.aer.com/continuum_frame.html
12174
12175 \author Thomas Kuhn
12176 \date 2002-28-08
12177 */
12178void CKD_mt_CIAfun_o2 (MatrixView pxsec,
12179 const Numeric Cin,
12180 const String& model,
12181 ConstVectorView f_grid,
12182 ConstVectorView abs_p,
12183 ConstVectorView abs_t,
12184 ConstVectorView vmr _U___attribute((unused)),
12185 const Verbosity& verbosity)
12186{
12187 CREATE_OUT3ArtsOut3 out3(verbosity);
12188
12189 // check the model name about consistency
12190 if ((model != "user") && (model != "CKDMT100"))
12191 {
12192 ostringstream os;
12193 os << "!!ERROR!!\n"
12194 << "CKD_MT1.00 O2 CIA fundamental band:\n"
12195 << "INPUT model name is: " << model << ".\n"
12196 << "VALID model names are user and CKDMT100\n";
12197 throw runtime_error(os.str());
12198 }
12199
12200
12201 // scaling factor of the O2-O2 CIA fundamental band absorption
12202 Numeric ScalingFac = 1.0000e0;
12203 if ( model == "user" )
12204 {
12205 ScalingFac = Cin; // input scaling factor of calculated absorption
12206 }
12207
12208
12209 const Index n_p = abs_p.nelem(); // Number of pressure levels
12210 const Index n_f = f_grid.nelem(); // Number of frequencies
12211
12212
12213 // Check that dimensions of abs_p, abs_t, and vmr agree:
12214 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12214
, "n_p==abs_t.nelem()") : (void)0)
;
12215 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12215
, "n_p==vmr.nelem()") : (void)0)
;
12216
12217 // Check that dimensions of pxsec are consistent with n_f
12218 // and n_p. It should be [n_f,n_p]:
12219 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12219
, "n_f==pxsec.nrows()") : (void)0)
;
12220 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12220
, "n_p==pxsec.ncols()") : (void)0)
;
12221
12222
12223 // ************************** CKD stuff ************************************
12224
12225 const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
12226 const Numeric T1 = 273.0e0;
12227 const Numeric TO = 296.0e0;
12228 const Numeric PO = 1013.0e0;
12229
12230
12231 // It is assumed here that f_grid is monotonically increasing with index!
12232 // In future change this return into a change of the loop over
12233 // the frequency f_grid. n_f_new < n_f
12234 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12235 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12236 if ( (V1ABS < O2O2_O2F_ckd_mt_100_v1) || (V1ABS > O2O2_O2F_ckd_mt_100_v2) ||
12237 (V2ABS < O2O2_O2F_ckd_mt_100_v1) || (V2ABS > O2O2_O2F_ckd_mt_100_v2) )
12238 {
12239 out3 << "WARNING:\n"
12240 << " CKD_MT 1.00 O2-O2 CIA fundamental band:\n"
12241 << " input frequency vector exceeds range of model validity\n"
12242 << " " << O2O2_O2F_ckd_mt_100_v1 << "<->" << O2O2_O2F_ckd_mt_100_v2 << "cm^-1\n";
12243 }
12244
12245
12246 // ------------------- subroutine O2_VER_1 ----------------------------
12247
12248 // retrieve the appropriate array sequence of the CKD model array.
12249 Numeric DVC = O2O2_O2F_ckd_mt_100_dv;
12250 Numeric V1C = V1ABS - DVC;
12251 Numeric V2C = V2ABS + DVC;
12252
12253 int I1 = (int) ((V1C-O2O2_O2F_ckd_mt_100_v1) / O2O2_O2F_ckd_mt_100_dv);
12254 if (V1C < O2O2_O2F_ckd_mt_100_v1) I1 = -1;
12255 V1C = O2O2_O2F_ckd_mt_100_v1 + (O2O2_O2F_ckd_mt_100_dv * (Numeric)I1);
12256
12257 int I2 = (int) ((V2C-O2O2_O2F_ckd_mt_100_v1) / O2O2_O2F_ckd_mt_100_dv);
12258
12259 int NPTC = I2-I1+3;
12260 if (NPTC > O2O2_O2F_ckd_mt_100_npt) NPTC = O2O2_O2F_ckd_mt_100_npt+1;
12261
12262 V2C = V1C + O2O2_O2F_ckd_mt_100_dv * (Numeric)(NPTC-1);
12263
12264 if (NPTC < 1)
12265 {
12266 out3 << "WARNING:\n"
12267 << " CKD_MT 1.00 O2 CIA fundamental band:\n"
12268 << " no elements of internal continuum coefficients could be found for the\n"
12269 << " input frequency range.\n"
12270 << " Leave the function without calculating the absorption.\n";
12271 return;
12272 }
12273
12274 Vector xo2(NPTC+addF77fields, 0.);
12275 Vector xo2t(NPTC+addF77fields, 0.);
12276
12277 for (Index J = 1 ; J <= NPTC ; ++J)
12278 {
12279 Index I = I1+J;
12280 if ( (I > 0) && (I <= O2O2_O2F_ckd_mt_100_npt) )
12281 {
12282 xo2[J] = O2O2_O2Fo_ckd_mt_100[I];
12283 xo2t[J] = O2O2_O2Ft_ckd_mt_100[I];
12284 }
12285 }
12286
12287 // ------------------- subroutine O2_VER_1 ----------------------------
12288
12289
12290
12291
12292 // Loop pressure/temperature:
12293 for ( Index i = 0 ; i < n_p ; ++i )
12294 {
12295 Numeric Tave = abs_t[i]; // [K]
12296 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
12297 // FIXME Numeric vmro2 = vmr[i]; // [1]
12298 Numeric WTOT = xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
12299 Numeric tau_fac= WTOT * (Pave/PO) * (T1/Tave);
12300
12301 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
12302
12303 Numeric xktfac = (1.000e0/TO) - (1.000e0/Tave); // [1/K]
12304 Numeric factor = (1.000e0 / xLosmt);
12305
12306 // Molecular cross section calculated by CKD.
12307 // The cross sectionis calculated on the predefined
12308 // CKD wavenumber grid.
12309 Vector k(NPTC+addF77fields+1, 0.); // [1/cm]
12310 for (Index J = 1 ; J <= NPTC ; ++J)
12311 {
12312 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
12313 Numeric SO2 = 0.0e0;
12314 if (xo2[J] > 0.0e0)
12315 {
12316 Numeric C0 = factor * xo2[J] * exp(xo2t[J]*xktfac) / VJ;
12317 SO2 = tau_fac * C0;
12318 }
12319
12320 // CKD cross section without radiative field
12321 k[J] = SO2 * RADFN_FUN(VJ,XKT); // [1]
12322 }
12323
12324
12325 // Loop input frequency array. The previously calculated cross section
12326 // has therefore to be interpolated on the input frequencies.
12327 for ( Index s = 0 ; s < n_f ; ++s )
12328 {
12329 // calculate the associated wave number (= 1/wavelength)
12330 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12331 if ( (V > O2O2_O2F_ckd_mt_100_v1) && (V < O2O2_O2F_ckd_mt_100_v2) )
12332 {
12333 // arts cross section [1/m]
12334 // interpolate the k vector on the f_grid grid
12335 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,V);
12336 }
12337 }
12338 }
12339
12340}
12341
12342// =================================================================================
12343
12344//! CKD version MT 1.00 O2 v0<-v0 band absorption
12345/*!
12346 Model reference:
12347 CKD_MT 1.00 implementation of oxygen collision induced fundamental model of
12348 O2 continuum formulated by
12349 Mate et al. over the spectral region 7550-8486 cm-1:
12350 B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
12351 "Absolute Intensities for the O2 1.27 micron
12352 continuum absorption",
12353 J. Geophys. Res., 104, 30,585-30,590, 1999.
12354
12355 The units of these continua coefficients are 1 / (amagat_O2*amagat_air)
12356
12357 Also, refer to the paper "Observed Atmospheric
12358 Collision Induced Absorption in Near Infrared Oxygen Bands",
12359 Mlawer, Clough, Brown, Stephen, Landry, Goldman, & Murcray,
12360 Journal of Geophysical Research (1997).
12361
12362 \param[out] pxsec cross section (absorption/volume mixing ratio) of
12363 O2 v0<-v0 band according to CKD_MT 1.00 [1/m]
12364 \param Cin strength scaling factor [1]
12365 \param model allows user defined input parameter set
12366 (Cin)<br>
12367 or choice of
12368 pre-defined parameters of specific models (see note below).
12369 \param f_grid predefined frequency grid [Hz]
12370 \param abs_p predefined pressure grid [Pa]
12371 \param abs_t predefined temperature grid [K]
12372 \param vmr O2 volume mixing ratio profile [1]
12373 \param abs_n2 N2 volume mixing ratio profile [1]
12374
12375 \remark B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,<br>
12376 Absolute Intensities for the O2 1.27 micron continuum absorption,<br>
12377 J. Geophys. Res., 104, 30,585-30,590, 1999.
12378
12379 \note This absorption model is taken from the FORTRAN77 code of
12380 CKD_MT version 1.00 written by<br>
12381 Atmospheric and Environmental Research Inc. (AER),<br>
12382 Radiation and Climate Group<br>
12383 131 Hartwell Avenue<br>
12384 Lexington, MA 02421, USA<br>
12385 http://www.rtweb.aer.com/continuum_frame.html<br>
12386 <br>
12387 Oxygen band absorption model for the \f$a^1\Delta_g\f$
12388 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
12389 \f$X^3\Sigma^-_g\f$ band system considering the
12390 \f$\nu=0\f$
12391 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
12392 \f$\nu=0\f$
12393 transitions.
12394
12395 \author Thomas Kuhn
12396 \date 2002-28-08
12397 */
12398void CKD_mt_v0v0_o2 (MatrixView pxsec,
12399 const Numeric Cin,
12400 const String& model,
12401 ConstVectorView f_grid,
12402 ConstVectorView abs_p,
12403 ConstVectorView abs_t,
12404 ConstVectorView vmr,
12405 ConstVectorView abs_n2,
12406 const Verbosity& verbosity)
12407{
12408 CREATE_OUT3ArtsOut3 out3(verbosity);
12409
12410 // check the model name about consistency
12411 if ((model != "user") && (model != "CKDMT100"))
12412 {
12413 ostringstream os;
12414 os << "!!ERROR!!\n"
12415 << "CKD_MT1.00 O2 band at 1.27 micrometer:\n"
12416 << "INPUT model name is: " << model << ".\n"
12417 << "VALID model names are user and CKDMT100\n";
12418 throw runtime_error(os.str());
12419 }
12420
12421
12422 // scaling factor of the O2 v0<-v0 band absorption
12423 Numeric ScalingFac = 1.0000e0;
12424 if ( model == "user" )
12425 {
12426 ScalingFac = Cin; // input scaling factor of calculated absorption
12427 };
12428
12429 const Index n_p = abs_p.nelem(); // Number of pressure levels
12430 const Index n_f = f_grid.nelem(); // Number of frequencies
12431
12432
12433 // Check that dimensions of abs_p, abs_t, and vmr agree:
12434 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12434
, "n_p==abs_t.nelem()") : (void)0)
;
12435 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12435
, "n_p==vmr.nelem()") : (void)0)
;
12436
12437 // Check that dimensions of pxsec are consistent with n_f
12438 // and n_p. It should be [n_f,n_p]:
12439 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12439
, "n_f==pxsec.nrows()") : (void)0)
;
12440 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12440
, "n_p==pxsec.ncols()") : (void)0)
;
12441
12442
12443 // ************************** CKD stuff ************************************
12444
12445 // FIXME const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
12446 const Numeric T1 = 273.0e0;
12447 // FIXME const Numeric TO = 296.0e0;
12448 const Numeric PO = 1013.0e0;
12449
12450 // It is assumed here that f_grid is monotonically increasing with index!
12451 // In future change this return into a change of the loop over
12452 // the frequency f_grid. n_f_new < n_f
12453 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12454 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12455 if ( (V1ABS < O2_00_ckd_mt_100_v1) || (V1ABS > O2_00_ckd_mt_100_v2) ||
12456 (V2ABS < O2_00_ckd_mt_100_v1) || (V2ABS > O2_00_ckd_mt_100_v2) )
12457 {
12458 out3 << "WARNING:\n"
12459 << " CKD_MT 1.00 O2 v0<-v0 band:\n"
12460 << " input frequency vector exceeds range of model validity\n"
12461 << " " << O2_00_ckd_mt_100_v1 << "<->" << O2_00_ckd_mt_100_v2 << "cm^-1\n";
12462 }
12463
12464
12465 // ------------------- subroutine O2INF1 ----------------------------
12466
12467 // retrieve the appropriate array sequence of the CKD model array.
12468 Numeric DVC = O2_00_ckd_mt_100_dv;
12469 Numeric V1C = V1ABS - DVC;
12470 Numeric V2C = V2ABS + DVC;
12471
12472 int I1 = (int) ((V1C-O2_00_ckd_mt_100_v1) / O2_00_ckd_mt_100_dv);
12473 if (V1C < O2_00_ckd_mt_100_v1) I1 = I1-1;
12474 V1C = O2_00_ckd_mt_100_v1 + (O2_00_ckd_mt_100_dv * (Numeric)I1);
12475
12476 int I2 = (int) ((V2C-O2_00_ckd_mt_100_v1) / O2_00_ckd_mt_100_dv);
12477
12478 int NPTC = I2-I1+3;
12479
12480 V2C = V1C + O2_00_ckd_mt_100_dv * (Numeric)(NPTC-1);
12481
12482 if (NPTC < 1)
12483 {
12484 out3 << "WARNING:\n"
12485 << " CKD_MT 1.00 O2 v0<-v0 band:\n"
12486 << " no elements of internal continuum coefficients could be found for the\n"
12487 << " input frequency range.\n"
12488 << " Leave the function without calculating the absorption.\n";
12489 return;
12490 }
12491
12492 Numeric CO[(int)(NPTC+addF77fields)];
12493
12494
12495 for (Index J = 1 ; J <= NPTC ; ++J)
12496 {
12497 CO[J] = 0.000e0;
12498 Index I = I1+J;
12499 if ( (I > 0) && (I <= O2_00_ckd_mt_100_npt) )
12500 {
12501 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
12502 CO[J] = O2_00_ckd_mt_100[I] / VJ;
12503 }
12504 }
12505
12506 // ------------------- subroutine O2INF1 ----------------------------
12507
12508
12509
12510
12511 // Loop pressure/temperature:
12512 for ( Index i = 0 ; i < n_p ; ++i )
12513 {
12514 Numeric Tave = abs_t[i]; // [K]
12515 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
12516 Numeric vmro2 = vmr[i]; // [1]
12517 Numeric vmrn2 = abs_n2[i]; // [1]
12518 Numeric ADJWO2 = (vmro2 + 0.300e0*vmrn2) / 0.446e0 *
12519 (Pave/PO) * (Pave/PO) * (T1/Tave) * (T1/Tave);
12520 Numeric XKT = Tave / 1.4387752e0; // = (T*k_B) / (h*c)
12521
12522 // Molecular cross section calculated by CKD.
12523 // The cross sectionis calculated on the predefined
12524 // CKD wavenumber grid. The abs. coeff. is then the
12525 // cross section times the number density.
12526 Numeric k[NPTC+addF77fields]; // [1/cm]
12527 k[0] = 0.00e0; // not used array field
12528 for (Index J = 1 ; J <= NPTC ; ++J)
12529 {
12530 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
12531 Numeric SO2 = 0.0e0;
12532 if (CO[J] > 0.0e0)
12533 {
12534 SO2 = ADJWO2 * CO[J];
12535 }
12536
12537 // CKD (cross section * number density) with radiative field
12538 k[J] = SO2 * RADFN_FUN(VJ,XKT); // [1/cm]
12539 }
12540
12541
12542 // Loop input frequency array. The previously calculated cross section
12543 // has therefore to be interpolated on the input frequencies.
12544 for ( Index s = 0 ; s < n_f ; ++s )
12545 {
12546 // calculate the associated wave number (= 1/wavelength)
12547 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12548 if ( (V > O2_00_ckd_mt_100_v1) && (V < O2_00_ckd_mt_100_v2) )
12549 {
12550 // arts cross section [1/m]
12551 // interpolate the k vector on the f_grid grid
12552 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,
12553 NPTC+addF77fields,V);
12554 }
12555 }
12556 }
12557
12558}
12559
12560// =================================================================================
12561
12562//! CKD version MT 1.00 O2 v1<-v0 band absorption
12563/*!
12564 Model reference:
12565 CKD_MT 1.00 implementation of oxygen v1<-v0 band model of
12566 Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,
12567 "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
12568 Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
12569
12570 \param[out] pxsec cross section (absorption/volume mixing ratio) of
12571 O2 v1<-v0 band according to CKD_MT 1.00 [1/m]
12572 \param Cin strength scaling factor [1]
12573 \param model allows user defined input parameter set
12574 (Cin)<br>
12575 or choice of
12576 pre-defined parameters of specific models (see note below).
12577 \param f_grid predefined frequency grid [Hz]
12578 \param abs_p predefined pressure grid [Pa]
12579 \param abs_t predefined temperature grid [K]
12580 \param vmr O2 volume mixing ratio profile [1]
12581
12582 \remark Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,<br>
12583 Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands,<br>
12584 J. Geophys. Res., 103, D4, 3859-3863, 1998.
12585
12586 \note This absorption model is taken from the FORTRAN77 code of
12587 CKD_MT version 1.00 written by<br>
12588 Atmospheric and Environmental Research Inc. (AER),<br>
12589 Radiation and Climate Group<br>
12590 131 Hartwell Avenue<br>
12591 Lexington, MA 02421, USA<br>
12592 http://www.rtweb.aer.com/continuum_frame.html<br>
12593 <br>
12594 Oxygen band absorption model for the \f$a^1\Delta_g\f$
12595 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
12596 \f$X^3\Sigma^-_g\f$ band system considering the
12597 \f$\nu=0\f$
12598 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
12599 \f$\nu=1\f$
12600 transitions.
12601
12602 \author Thomas Kuhn
12603 \date 2002-28-08
12604 */
12605void CKD_mt_v1v0_o2 (MatrixView pxsec,
12606 const Numeric Cin,
12607 const String& model,
12608 ConstVectorView f_grid,
12609 ConstVectorView abs_p,
12610 ConstVectorView abs_t,
12611 ConstVectorView vmr,
12612 const Verbosity& verbosity)
12613{
12614 CREATE_OUT3ArtsOut3 out3(verbosity);
12615
12616 // check the model name about consistency
12617 if ((model != "user") && (model != "CKDMT100"))
12618 {
12619 ostringstream os;
12620 os << "!!ERROR!!\n"
12621 << "CKD_MT1.00 O2 band at 1.06 micrometer:\n"
12622 << "INPUT model name is: " << model << ".\n"
12623 << "VALID model names are user and CKDMT100\n";
12624 throw runtime_error(os.str());
12625 }
12626
12627
12628 // scaling factor of the O2 v1<-v0 band absorption
12629 Numeric ScalingFac = 1.0000e0;
12630 if ( model == "user" )
12631 {
12632 ScalingFac = Cin; // input scaling factor of calculated absorption
12633 };
12634
12635 const Index n_p = abs_p.nelem(); // Number of pressure levels
12636 const Index n_f = f_grid.nelem(); // Number of frequencies
12637
12638
12639 // Check that dimensions of abs_p, abs_t, and vmr agree:
12640 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12640
, "n_p==abs_t.nelem()") : (void)0)
;
12641 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12641
, "n_p==vmr.nelem()") : (void)0)
;
12642
12643 // Check that dimensions of pxsec are consistent with n_f
12644 // and n_p. It should be [n_f,n_p]:
12645 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12645
, "n_f==pxsec.nrows()") : (void)0)
;
12646 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12646
, "n_p==pxsec.ncols()") : (void)0)
;
12647
12648
12649 // ************************** CKD stuff ************************************
12650
12651 const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
12652 const Numeric T1 = 273.0e0;
12653 const Numeric TO = 296.0e0;
12654 const Numeric PO = 1013.0e0;
12655 // FIXME const Numeric vmr_argon = 9.000e-3; // VMR of argon is assumed to be const.
12656
12657
12658 // CKD_MT 1.00 implementation of oxygen v1<-v0 band model of
12659 // Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,
12660 // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
12661 // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
12662 const Numeric V1S = O2_10_ckd_mt_100_v1;
12663 const Numeric V2S = O2_10_ckd_mt_100_v2;
12664 const Numeric DVS = O2_10_ckd_mt_100_dv;
12665 const Numeric V1_osc = 9375.000e0;
12666 const Numeric HW1 = 58.960e0;
12667 const Numeric V2_osc = 9439.000e0;
12668 const Numeric HW2 = 45.040e0;
12669 const Numeric S1 = 1.166e-4;
12670 const Numeric S2 = 3.086e-5;
12671
12672
12673 // It is assumed here that f_grid is monotonically increasing with index!
12674 // In future change this return into a change of the loop over
12675 // the frequency f_grid. n_f_new < n_f
12676 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12677 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12678 if ( (V1ABS < O2_10_ckd_mt_100_v1) || (V1ABS > O2_10_ckd_mt_100_v2) ||
12679 (V2ABS < O2_10_ckd_mt_100_v1) || (V2ABS > O2_10_ckd_mt_100_v2) )
12680 {
12681 out3 << "WARNING:\n"
12682 << " CKD_MT 1.00 O2 v1<-v0 band:\n"
12683 << " input frequency vector exceeds range of model validity\n"
12684 << " " << O2_10_ckd_mt_100_v1 << "<->" << O2_10_ckd_mt_100_v2 << "cm^-1\n";
12685 }
12686
12687
12688 // ------------------- subroutine O2INF2 ----------------------------
12689
12690 // retrieve the appropriate array sequence of the CKD model array.
12691 Numeric DVC = DVS;
12692 Numeric V1C = V1ABS - DVC;
12693 Numeric V2C = V2ABS + DVC;
12694
12695 int NPTC = (int)( ((V2C-V1C)/DVC) + 3 );
12696
12697 V2C = V1C + ( DVC * (Numeric)(NPTC-1) );
12698
12699 if (NPTC < 1)
12700 {
12701 out3 << "WARNING:\n"
12702 << " CKD_MT 1.00 O2 v1<-v0 band:\n"
12703 << " no elements of internal continuum coefficients could be found for the\n"
12704 << " input frequency range.\n"
12705 << " Leave the function without calculating the absorption.\n";
12706 return;
12707 }
12708
12709 Numeric C[NPTC+addF77fields];
12710 C[0] = 0.000e0; // not used field of array
12711
12712 for (Index J = 1 ; J <= NPTC ; ++J)
12713 {
12714 C[J] = 0.000e0;
12715 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
12716
12717 if ( (VJ > V1S) && (VJ < V2S) )
12718 {
12719 Numeric DV1 = VJ - V1_osc;
12720 Numeric DV2 = VJ - V2_osc;
12721
12722 Numeric DAMP1 = 1.00e0;
12723 Numeric DAMP2 = 1.00e0;
12724
12725 if ( DV1 < 0.00e0 )
12726 {
12727 DAMP1 = exp(DV1 / 176.100e0);
12728 }
12729
12730 if ( DV2 < 0.00e0 )
12731 {
12732 DAMP2 = exp(DV2 / 176.100e0);
12733 }
12734
12735 Numeric O2INF = 0.31831e0 *
12736 ( ((S1 * DAMP1 / HW1)/(1.000e0 + pow((DV1/HW1),(Numeric)2.0e0) )) +
12737 ((S2 * DAMP2 / HW2)/(1.000e0 + pow((DV2/HW2),(Numeric)2.0e0) )) ) * 1.054e0;
12738 C[J] = O2INF / VJ;
12739 }
12740 }
12741
12742
12743 // ------------------- subroutine O2INF2 ----------------------------
12744
12745
12746 // Loop pressure/temperature:
12747 for ( Index i = 0 ; i < n_p ; ++i )
12748 {
12749 Numeric Tave = abs_t[i]; // [K]
12750 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
12751 Numeric vmro2 = vmr[i]; // [1]
12752 Numeric WTOT = 1.000e-20 * xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
12753 Numeric ADJWO2 = (vmro2 / 0.209e0) * WTOT * (Pave/PO) * (TO/Tave);
12754 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
12755
12756 // Molecular cross section calculated by CKD.
12757 // The cross sectionis calculated on the predefined
12758 // CKD wavenumber grid.
12759 Numeric k[NPTC+addF77fields]; // [1/cm]
12760 k[0] = 0.00e0; // not used array field
12761 for (Index J = 1 ; J <= NPTC ; ++J)
12762 {
12763 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
12764 Numeric SO2 = 0.0e0;
12765 if (C[J] > 0.0e0)
12766 {
12767 SO2 = ADJWO2 * C[J];
12768 }
12769
12770 // CKD cross section without radiative field
12771 k[J] = SO2 * RADFN_FUN(VJ,XKT); // [1]
12772 }
12773
12774
12775 // Loop input frequency array. The previously calculated cross section
12776 // has therefore to be interpolated on the input frequencies.
12777 for ( Index s = 0 ; s < n_f ; ++s )
12778 {
12779 // calculate the associated wave number (= 1/wavelength)
12780 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12781 if ( (V > V1S) && (V < V2S) )
12782 {
12783 // arts cross section [1/m]
12784 // interpolate the k vector on the f_grid grid
12785 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,
12786 NPTC+addF77fields,V);
12787 }
12788 }
12789 }
12790
12791}
12792// =================================================================================
12793
12794//! CKD version MT 2.50 O2
12795/*!
12796 Model reference:
12797 O2 continuum formulated by Greenblatt et al. over the spectral region
12798 8797-29870 cm-1: "Absorption Coefficients of Oxygen Between
12799 330 and 1140 nm, G.D. Green blatt, J.J. Orlando, J.B. Burkholder,
12800 and A.R. Ravishabkara, J. Geophys. Res., 95, 18577-18582, 1990.
12801
12802 \param[out] pxsec cross section (absorption/volume mixing ratio) of
12803 O2 v1<-v0 band according to CKD_MT 1.00 [1/m]
12804 \param Cin strength scaling factor [1]
12805 \param model allows user defined input parameter set
12806 (Cin)<br>
12807 or choice of
12808 pre-defined parameters of specific models (see note below).
12809 \param f_grid predefined frequency grid [Hz]
12810 \param abs_p predefined pressure grid [Pa]
12811 \param abs_t predefined temperature grid [K]
12812 \param vmr O2 volume mixing ratio profile [1]
12813
12814
12815 \note This absorption model is taken from the FORTRAN77 code of
12816 CKD_MT version 2.50 written by<br>
12817 Atmospheric and Environmental Research Inc. (AER),<br>
12818 Radiation and Climate Group<br>
12819 131 Hartwell Avenue<br>
12820 Lexington, MA 02421, USA<br>
12821 http://www.rtweb.aer.com/continuum_frame.html<br>
12822 <br>
12823 Oxygen band absorption model for the \f$a^1\Delta_g\f$
12824 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
12825 \f$X^3\Sigma^-_g\f$ band system considering the
12826 \f$\nu=0\f$
12827 \htmlonly&larr;\endhtmlonly \latexonly$\leftarrow$\endlatexonly
12828 \f$\nu=1\f$
12829 transitions.
12830
12831 \author Mayuri Tatiya
12832 \date 2014-27-06
12833 */
12834void CKD_mt_250_o2_vis (MatrixView pxsec,
12835 const Numeric Cin,
12836 const String& model,
12837 ConstVectorView f_grid,
12838 ConstVectorView abs_p,
12839 ConstVectorView abs_t,
12840 ConstVectorView DEBUG_ONLY(vmr)vmr,
12841 const Verbosity& verbosity)
12842{
12843 CREATE_OUT3ArtsOut3 out3(verbosity);
12844
12845 // check the model name about consistency
12846 if ((model != "user") && (model != "CKDMT252"))
12847 {
12848 ostringstream os;
12849 os << "!!ERROR!!\n"
12850 << "CKD_MT2.50 O2 band at 1.06 micrometer:\n"
12851 << "INPUT model name is: " << model << ".\n"
12852 << "VALID model names are user and CKDMT252\n";
12853 throw runtime_error(os.str());
12854 }
12855
12856
12857 // scaling factor of the O2 v1<-v0 band absorption
12858 Numeric ScalingFac = 1.0000e0;
12859 if ( model == "user" )
12860 {
12861 ScalingFac = Cin; // input scaling factor of calculated absorption
12862 };
12863
12864 const Index n_p = abs_p.nelem(); // Number of pressure levels
12865 const Index n_f = f_grid.nelem(); // Number of frequencies
12866
12867
12868 // Check that dimensions of abs_p, abs_t, and vmr agree:
12869 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12869
, "n_p==abs_t.nelem()") : (void)0)
;
12870 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12870
, "n_p==vmr.nelem()") : (void)0)
;
12871
12872 // Check that dimensions of pxsec are consistent with n_f
12873 // and n_p. It should be [n_f,n_p]:
12874 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12874
, "n_f==pxsec.nrows()") : (void)0)
;
12875 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 12875
, "n_p==pxsec.ncols()") : (void)0)
;
12876
12877
12878 // ************************** CKD stuff ************************************
12879
12880 const Numeric xLosmt = 2.686763e19; // Loschmidt Number [molecules/cm^3]
12881 const Numeric T1 = 273.0e0;
12882 // const Numeric TO = 296.0e0;
12883 const Numeric PO = 1013.0e0;
12884 // FIXME const Numeric vmr_argon = 9.000e-3; // VMR of argon is assumed to be const.
12885
12886
12887 // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
12888 // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
12889 const Numeric V1S = O2_vis_ckd_mt_250_v1;
12890 const Numeric V2S = O2_vis_ckd_mt_250_v2;
12891 const Numeric DVS = O2_vis_ckd_mt_250_dv;
12892
12893 // It is assumed here that f_grid is monotonically increasing with index!
12894 // In future change this return into a change of the loop over
12895 // the frequency f_grid. n_f_new < n_f
12896 Numeric V1ABS = f_grid[0] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12897 Numeric V2ABS = f_grid[n_f-1] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12898 if ( (V1ABS < O2_vis_ckd_mt_250_v1) || (V1ABS > O2_vis_ckd_mt_250_v2) ||
12899 (V2ABS < O2_vis_ckd_mt_250_v1) || (V2ABS > O2_vis_ckd_mt_250_v2) )
12900 {
12901 out3 << "WARNING:\n"
12902 << " CKD_MT 2.50 O2 vis band:\n"
12903 << " input frequency vector exceeds range of model validity\n"
12904 << " " << O2_vis_ckd_mt_250_v1 << "<->" << O2_vis_ckd_mt_250_v2 << "cm^-1\n";
12905 }
12906
12907
12908 // ------------------- subroutine O2INF2 ----------------------------
12909
12910 // retrieve the appropriate array sequence of the CKD model array.
12911 Numeric DVC = DVS;
12912 Numeric V1C = V1ABS - DVC;
12913 Numeric V2C = V2ABS + DVC;
12914
12915 int I1 = (int) ((V1C-O2_vis_ckd_mt_250_v1) / O2_vis_ckd_mt_250_dv);
12916 if (V1C < O2_vis_ckd_mt_250_v1) I1 = I1-1;
12917 V1C = O2_vis_ckd_mt_250_v1 + (O2_vis_ckd_mt_250_dv * (Numeric)I1);
12918
12919 int I2 = (int) ((V2C-O2_vis_ckd_mt_250_v1) / O2_vis_ckd_mt_250_dv);
12920
12921 int NPTC = I2-I1+3;
12922
12923 V2C = V1C + O2_vis_ckd_mt_250_dv * (Numeric)(NPTC-1);
12924
12925 if (NPTC < 1)
12926 {
12927 out3 << "WARNING:\n"
12928 << " CKD_MT 2.50 O2 vis band:\n"
12929 << " no elements of internal continuum coefficients could be found for the\n"
12930 << " input frequency range.\n"
12931 << " Leave the function without calculating the absorption.\n";
12932 return;
12933 }
12934
12935 Numeric CO[(int)(NPTC+addF77fields)];
12936
12937
12938 for (Index J = 1 ; J <= NPTC ; ++J)
12939 {
12940 CO[J] = 0.000e0;
12941 Index I = I1+J;
12942 if ( (I > 0) && (I <= O2_vis_ckd_mt_250_npt) )
12943 {
12944 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
12945 CO[J] = O2_vis_ckd_mt_250[I] / VJ;
12946 }
12947 }
12948
12949
12950 // ------------------- subroutine O2_vis ----------------------------
12951
12952
12953 // Loop pressure/temperature:
12954 for ( Index i = 0 ; i < n_p ; ++i )
12955 {
12956 Numeric Tave = abs_t[i]; // [K]
12957 Numeric Pave = (abs_p[i]*1.000e-2); // [hPa]
12958 // Numeric vmro2 = vmr[i]; // [1]
12959 Numeric WTOT = 1.000e-20 * xLosmt * (Pave/PO) * (T1/Tave); // [molecules/cm^2]
12960 Numeric XKT = Tave / 1.4387752; // = (T*k_B) / (h*c)
12961 Numeric tau_fac= WTOT * (Pave/PO) * (T1/Tave);
12962
12963// these are the conditions reported in the paper by Greenblatt et al. for
12964// the spectrum of Fig. 1.
12965
12966// conditions: 55 atm.; 296 K; 89.5 cm path
12967
12968 Numeric factor = 1.000e0/(xLosmt*1.e-20*pow( (55.e0*273.0e0/296.0e0), 2)*89.5);
12969
12970 // Molecular cross section calculated by CKD.
12971 // The cross sectionis calculated on the predefined
12972 // CKD wavenumber grid.
12973 Numeric k[NPTC+addF77fields]; // [1/cm]
12974 k[0] = 0.00e0; // not used array field
12975 for (Index J = 1 ; J <= NPTC ; ++J)
12976 {
12977 Numeric VJ = V1C + (DVC * (Numeric)(J-1));
12978 Numeric SO2 = 0.0e0;
12979
12980 SO2 = CO[J] * factor * tau_fac;
12981
12982 // CKD cross section without radiative field
12983 k[J] = SO2 * RADFN_FUN(VJ,XKT); // [1]
12984 }
12985
12986
12987 // Loop input frequency array. The previously calculated cross section
12988 // has therefore to be interpolated on the input frequencies.
12989 for ( Index s = 0 ; s < n_f ; ++s )
12990 {
12991 // calculate the associated wave number (= 1/wavelength)
12992 Numeric V = f_grid[s] / (SPEED_OF_LIGHT * 1.00e2); // [cm^-1]
12993 if ( (V > V1S) && (V < V2S) )
12994 {
12995 // arts cross section [1/m]
12996 // interpolate the k vector on the f_grid grid
12997 pxsec(s,i) += ScalingFac * 1.000e2 * XINT_FUN(V1C,V2C,DVC,k,
12998 NPTC+addF77fields,V);
12999 }
13000 }
13001 }
13002
13003}
13004
13005// #################################################################################
13006
13007//! CKD version 2.4 H2O continuum absorption model
13008/*!
13009 \param[out] pxsec cross section (absorption/volume mixing ratio) of
13010 H2O continuum according to CKD2.4 [1/m]
13011 \param isf =0 self continuum, =1 foreign continuum
13012 \param Cin strength scaling factor [1]
13013 \param model allows user defined input parameter set
13014 (Cin)<br> or choice of
13015 pre-defined parameters of specific models (see note below).
13016 \param f_grid predefined frequency grid [Hz]
13017 \param abs_p predefined pressure grid [Pa]
13018 \param abs_t predefined temperature grid [K]
13019 \param vmr H2O volume mixing ratio profile [1]
13020 \param abs_n2 N2 volume mixing ratio profile [1]
13021
13022 \note this "crude" version of the CKD2.4 model is a f2c
13023 conversion of the F77 code taken out of MonoRTM RT-model written by<br>
13024 S. BOUKABARA, S.A. CLOUGH, and R. HOFFMAN<br>
13025 Atmospheric and Environmental Research Inc. (AER),<br>
13026 Radiation and Climate Group<br>
13027 131 Hartwell Avenue<br>
13028 Lexington, MA 02421<br>
13029 USA<br>
13030 E-mail: sboukaba@aer.com, clough@aer.com
13031
13032 \remark Reference: A. Borysow and L. Frommhold,
13033 The Astrophysical Journal, vol.311, pp.1043-1057, 1986
13034 see <a href="http://adsabs.harvard.edu/article_service.html">for a scanned
13035 version of the paper</a>.
13036
13037 \author Thomas Kuhn
13038 \date 2002-03-06
13039 */
13040void CKD24_H20 (MatrixView pxsec,
13041 int isf,
13042 const Numeric Cin,
13043 const String& model,
13044 ConstVectorView f_grid,
13045 ConstVectorView abs_p,
13046 ConstVectorView abs_t,
13047 ConstVectorView vmr,
13048 ConstVectorView abs_n2,
13049 const Verbosity& verbosity)
13050{
13051 CREATE_OUT3ArtsOut3 out3(verbosity);
13052
13053 //
13054 //
13055 // external function to call (original F77 code translated with f2c)
13056 /* INPUT PARAMETERS: */
13057 /* P [hPa] TOTAL PRESSURE */
13058 /* T [K] TEMPERATURE */
13059 /* VMRH2O [1] H2O VOLUME MIXING RATIO */
13060 /* VMRN2 [1] N2 VOLUME MIXING RATIO */
13061 /* VMRO2 [1] O2 VOLUME MIXING RATIO */
13062 /* FREQ [Hz] FREQUENCY OF CALCULATION */
13063 extern double artsckd_(double p, double t,
13064 double vmrh2o, double vmrn2, double vmro2,
13065 double freq, int ivc);
13066 //
13067 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13068 Numeric XFAC = 1.0000; // scaling factor
13069 // ---------------------------------------------------------------------------------------
13070
13071
13072 // check the model name about consistency
13073 if ((model != "user") && (model != "CKD24"))
13074 {
13075 ostringstream os;
13076 os << "!!ERROR!!\n"
13077 << "CKDv2.4.2 H2O self/foreign continuum:\n"
13078 << "INPUT model name is: " << model << ".\n"
13079 << "VALID model names are user and CKD24\n";
13080 throw runtime_error(os.str());
13081 }
13082
13083
13084 // select the parameter set (!!model dominates values!!):
13085 if ( model == "CKD24" )
13086 {
13087 XFAC = 1.0000;
13088 }
13089 else if ( model == "user" )
13090 {
13091 XFAC = Cin;
13092 }
13093 else
13094 {
13095 if (isf == 0) {
13096 ostringstream os;
13097 os << "H2O-SelfContCKD24: ERROR! Wrong model values given.\n"
13098 << "allowed models are: 'CKD24', 'user'" << '\n';
13099 throw runtime_error(os.str());
13100 }
13101 if (isf == 1) {
13102 ostringstream os;
13103 os << "H2O-ForeignContCKD: ERROR! Wrong model values given.\n"
13104 << "allowed models are: 'CKD24', 'user'" << '\n';
13105 throw runtime_error(os.str());
13106 }
13107 }
13108
13109 if (isf == 0) {
13110 out3 << "H2O-SelfContCKD24: (model=" << model << ") parameter values in use:\n"
13111 << " XFAC = " << XFAC << "\n";
13112 }
13113 if (isf == 1) {
13114 out3 << "H2O-ForeignContCKD: (model=" << model << ") parameter values in use:\n"
13115 << " XFAC = " << XFAC << "\n";
13116 }
13117
13118
13119 const Index n_p = abs_p.nelem(); // Number of pressure levels
13120 const Index n_f = f_grid.nelem(); // Number of frequencies
13121
13122
13123 // Check that dimensions of abs_p, abs_t, and vmr agree:
13124 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13124
, "n_p==abs_t.nelem()") : (void)0)
;
13125 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13125
, "n_p==vmr.nelem()") : (void)0)
;
13126
13127 // Check that dimensions of pxsec are consistent with n_f
13128 // and n_p. It should be [n_f,n_p]:
13129 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13129
, "n_f==pxsec.nrows()") : (void)0)
;
13130 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13130
, "n_p==pxsec.ncols()") : (void)0)
;
13131
13132 // ivc = 1 : N2-N2 CKD version of Borysow-Fromhold model
13133 // ivc = 21 : H2O CKD2.4 self cont part
13134 // ivc = 22 : H2O CKD2.4 foreign cont part
13135 // ivc = 31 : MPMf87/s93 self cont part
13136 // ivc = 32 : MPMf87/s93 foreign cont part
13137 int ivc = 55;
13138 if (isf == 0) {
13139 ivc = 21; // CKD2.4 self continuum
13140 // ivc = 31; // MPMf87/s93 self continuum
13141 }
13142 if (isf == 1) {
13143 ivc = 22; // CKD2.4 foreign continuum
13144 //ivc = 32; // MPMf87/s93 foreign continuum
13145 }
13146 if ((ivc != 1) && (ivc != 21) && (ivc != 22) && (ivc != 31) && (ivc != 32)) {
13147 ostringstream os;
13148 os << "!!ERROR: CKD24 H2O model: wrong input parameter isf (=0,1) given!\n"
13149 << "retrun without calculation!" << "\n"
13150 << "actual value of isf is " << isf << "\n";
13151 throw runtime_error(os.str());
13152 return;
13153 }
13154 // ivc = 1;
13155
13156 // Loop pressure/temperature:
13157 for ( Index i=0; i<n_p; ++i )
13158 {
13159 double T = (double) abs_t[i]; // [K]
13160 double p = (double) (abs_p[i]*1.000e-2); // [hPa]
13161 double vmrh2o = (double) vmr[i]; // [1]
13162 double vmrn2 = (double) abs_n2[i]; // [1]
13163 double vmro2 = 0.0e0; // [1]
13164
13165 //cout << "------------------------------------------------\n";
13166 //cout << "CKD2.4 H2O: ivc =" << ivc << "\n";
13167 //cout << "CKD2.4 H2O: T =" << T << " K\n";
13168 //cout << "CKD2.4 H2O: p =" << p << " hPa\n";
13169 //cout << "CKD2.4 H2O: vmrh2o=" << vmrh2o << "\n";
13170 //cout << "CKD2.4 H2O: vmrn2 =" << vmrn2 << "\n";
13171 //cout << "CKD2.4 H2O: vmro2 =" << vmro2 << "\n";
13172 // Loop frequency:
13173 for ( Index s=0; s<n_f; ++s )
13174 {
13175 // the second vmr of N2 will be multiplied at the stage of
13176 // absorption calculation: abs = vmr * pxsec.
13177 double f = (double) f_grid[s]; // [Hz]
13178 if (ivc == 1) { // ---------- N2 -----------------
13179 if (abs_n2[i] > 0.0e0) {
13180 //cout << "CKD2.4 N2: f =" << f << " Hz\n";
13181 double cont = artsckd_(p, T, vmrh2o, vmrn2, vmro2, f, ivc);
13182 pxsec(s,i) += (Numeric) (cont / vmr[i]);
13183 //cout << "CKD2.4 N2: abs =" << cont << " 1/m\n";
13184 }
13185 } else { // ---------------- H2O -----------------
13186 if (vmr[i] > 0.0e0) {
13187 //cout << "CKD2.4 H2O: f =" << f << " Hz\n";
13188 double cont = artsckd_(p, T, vmrh2o, vmrn2, vmro2, f, ivc);
13189 pxsec(s,i) += (Numeric) (cont / vmr[i]);
13190 //cout << "CKD2.4 H2O: abs =" << cont << " 1/m\n";
13191 }
13192 }
13193 }
13194 }
13195 return;
13196}
13197//
13198// #################################################################################
13199//! Pardo_ATM_H2O_ForeignContinuum
13200/*!
13201 \param[out] pxsec cross section (absorption/volume mixing ratio) of
13202 N2-continuum according to Rosenkranz, 1993 [1/m]
13203 \param Cin continuum strength [1/m * 1/(Hz*Pa)²]
13204 \param model allows user defined input parameter set
13205 (Cin and xTin)<br> or choice of
13206 pre-defined parameters of specific models (see note below).
13207 \param f_grid predefined frequency grid [Hz]
13208 \param abs_p predefined pressure grid [Pa]
13209 \param abs_t predefined temperature grid [K]
13210 \param vmr H2O volume mixing ratio [1]
13211
13212 \note Except for model 'user' the input parameters Cin and xTin
13213 are neglected (model dominates over parameters).<br>
13214 Allowed models: 'ATM', and 'user'.
13215 See the user guide for detailed explanations.
13216
13217 \remark Reference: Pardo et al., IEEE, Trans. Ant. Prop., <br>
13218 Vol 49, No 12, pp. 1683-1694, 2001.
13219
13220 \author Thomas Kuhn
13221 \date 2001-04-10
13222 */
13223
13224void Pardo_ATM_H2O_ForeignContinuum (MatrixView pxsec,
13225 const Numeric Cin,
13226 const String& model,
13227 ConstVectorView f_grid,
13228 ConstVectorView abs_p,
13229 ConstVectorView abs_t,
13230 ConstVectorView vmr,
13231 const Verbosity& verbosity)
13232{
13233 CREATE_OUT3ArtsOut3 out3(verbosity);
13234
13235 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13236 // standard values for the Pardo et al. model (IEEE, Trans. Ant. Prop.,
13237 // Vol 49, No 12, pp. 1683-1694, 2001)
13238 const Numeric C_ATM = 0.0315; // [1/m]
13239 // ---------------------------------------------------------------------------------------
13240
13241 // select the parameter set (!!model dominates parameters!!):
13242 Numeric C;
13243 if ( model == "ATM" )
13244 {
13245 C = C_ATM;
13246 }
13247 else if ( model == "user" )
13248 {
13249 C = Cin;
13250 }
13251 else
13252 {
13253 ostringstream os;
13254 os << "H2O-ForeignContATM01: ERROR! Wrong model values given.\n"
13255 << "allowed models are: 'ATM', 'user'" << '\n';
13256 throw runtime_error(os.str());
13257 }
13258 out3 << "H2O-ForeignContATM01: (model=" << model << ") parameter values in use:\n"
13259 << " C_f = " << C << "\n";
13260
13261 const Index n_p = abs_p.nelem(); // Number of pressure levels
13262 const Index n_f = f_grid.nelem(); // Number of frequencies
13263
13264 // Check that dimensions of abs_p, abs_t, and vmr agree:
13265 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13265
, "n_p==abs_t.nelem()") : (void)0)
;
13266 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13266
, "n_p==vmr.nelem()") : (void)0)
;
13267
13268 // Check that dimensions of pxsec are consistent with n_f
13269 // and n_p. It should be [n_f,n_p]:
13270 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13270
, "n_f==pxsec.nrows()") : (void)0)
;
13271 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13271
, "n_p==pxsec.ncols()") : (void)0)
;
13272
13273 // Loop over pressure/temperature grid:
13274 for ( Index i=0; i<n_p; ++i )
13275 {
13276 // since this is an effective "dry air" continuum, it is not really
13277 // it is not specifically attributed to N2, so we need the total
13278 // dry air part in total which is equal to the total minus the
13279 // water vapor pressure:
13280 Numeric pd = abs_p[i] * ( 1.00000e0 - vmr[i] ); // [Pa]
13281 // since the H2O VMR will be multiplied in abs_coefCalc, we omit it here
13282 Numeric pwdummy = abs_p[i] ; // [Pa]
13283 // Loop over frequency grid:
13284 for ( Index s=0; s<n_f; ++s )
13285 {
13286 // Becaue this is an effective "dry air" continuum, it is not really
13287 // specific N2 but mainly caused by N2. Therefore the N2 vmr must be
13288 // canceled out here which is later in abs_coefCalc multiplied
13289 // (calculation: abs = vmr * pxsec):
13290 pxsec(s,i) += C * // strength [1/(m*Hz²Pa²)]
13291 pow( (f_grid[s]/(Numeric)2.25e11), (Numeric)2. ) * // quadratic f dependence [1]
13292 pow( ((Numeric)300.0/abs_t[i]), (Numeric)3. ) * // free T dependence [1]
13293 (pd/1.01300e5) * // p_dry dependence [1]
13294 (pwdummy/1.01300e5); // p_H2O dependence [1]
13295 }
13296 }
13297}
13298//
13299// #################################################################################
13300//
13301//! MPM93 H2O pseudo continuum line parameters:
13302/*!
13303 see publication side of National Telecommunications and Information Administration
13304 http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
13305 and ftp side for downloading the MPM93 original source code:
13306 ftp://ftp.its.bldrdoc.gov/pub/mpm93/
13307
13308 \param[out] pxsec cross section (absorption/volume mixing ratio) of
13309 H2O according to MPM87 [1/m]
13310 \param fcenter continuum pseudo-line center frequency [Hz]
13311 \param b1 continuum pseudo-line line strength [Hz/Pa]
13312 \param b2 continuum pseudo-line line strength temperature exponent [1]
13313 \param b3 continuum pseudo-line line broadening parameter [Hz/Pa]
13314 \param b4 continuum pseudo-line line broadening parameter [1]
13315 \param b5 continuum pseudo-line line broadening parameter [1]
13316 \param b6 continuum pseudo-line line broadening parameter [1]
13317 \param model allows user defined input parameter set
13318 (fcenter and b1 to b6)<br> or choice of
13319 pre-defined parameters of specific models (see note below).
13320 \param f_grid predefined frequency grid [Hz]
13321 \param abs_p predefined pressure grid [Pa]
13322 \param abs_t predefined temperature grid [K]
13323 \param vmr H2O volume mixing ratio [1]
13324
13325 \note Except for model 'user' the input parameters fcenter and b1 to b6
13326 are neglected (model dominates over parameters).<br>
13327 Allowed models: 'MPM93' and 'user'.
13328 See the user guide for detailed explanations.
13329
13330 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
13331 <i>Propagation modeling of moist air and suspended water/ice
13332 particles at frequencies below 1000 GHz</i>,<br>
13333 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
13334 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
13335
13336 \author Thomas Kuhn
13337 \date 2001-11-05
13338 */
13339
13340void MPM93_H2O_continuum (MatrixView pxsec,
13341 const Numeric fcenter,
13342 const Numeric b1,
13343 const Numeric b2,
13344 const Numeric b3,
13345 const Numeric b4,
13346 const Numeric b5,
13347 const Numeric b6,
13348 const String& model,
13349 ConstVectorView f_grid,
13350 ConstVectorView abs_p,
13351 ConstVectorView abs_t,
13352 ConstVectorView vmr,
13353 const Verbosity& verbosity)
13354{
13355 CREATE_OUT3ArtsOut3 out3(verbosity);
13356
13357 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13358 // standard values for the MPM93 H2O continuum model
13359 // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
13360 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
13361 const Numeric MPM93fo_orig = 1780.000e9; // [Hz]
13362 const Numeric MPM93b1_orig = 22300.000; // [Hz/Pa]
13363 const Numeric MPM93b2_orig = 0.952; // [1]
13364 const Numeric MPM93b3_orig = 17.600e4; // [Hz/Pa]
13365 const Numeric MPM93b4_orig = 30.500; // [1]
13366 const Numeric MPM93b5_orig = 2.000; // [1]
13367 const Numeric MPM93b6_orig = 5.000; // [1]
13368 // ---------------------------------------------------------------------------------------
13369
13370
13371 // select the parameter set (!!model goes for values!!):
13372 Numeric MPM93fopcl, MPM93b1pcl, MPM93b2pcl,
13373 MPM93b3pcl, MPM93b4pcl, MPM93b5pcl,
13374 MPM93b6pcl;
13375 if ( model == "MPM93" )
13376 {
13377 MPM93fopcl = MPM93fo_orig;
13378 MPM93b1pcl = MPM93b1_orig;
13379 MPM93b2pcl = MPM93b2_orig;
13380 MPM93b3pcl = MPM93b3_orig;
13381 MPM93b4pcl = MPM93b4_orig;
13382 MPM93b5pcl = MPM93b5_orig;
13383 MPM93b6pcl = MPM93b6_orig;
13384 }
13385 else if ( model == "user" )
13386 {
13387 MPM93fopcl = fcenter;
13388 MPM93b1pcl = b1;
13389 MPM93b2pcl = b2;
13390 MPM93b3pcl = b3;
13391 MPM93b4pcl = b4;
13392 MPM93b5pcl = b5;
13393 MPM93b6pcl = b6;
13394 }
13395 else
13396 {
13397 ostringstream os;
13398 os << "H2O-ContMPM93: ERROR! Wrong model values given.\n"
13399 << "allowed models are: 'MPM93', 'user'" << '\n';
13400 throw runtime_error(os.str());
13401 }
13402 out3 << "H2O-ContMPM93: (model=" << model << ") parameter values in use:\n"
13403 << " fo = " << MPM93fopcl << "\n"
13404 << " b1 = " << MPM93b1pcl << "\n"
13405 << " b2 = " << MPM93b2pcl << "\n"
13406 << " b3 = " << MPM93b3pcl << "\n"
13407 << " b4 = " << MPM93b4pcl << "\n"
13408 << " b5 = " << MPM93b5pcl << "\n"
13409 << " b6 = " << MPM93b6pcl << "\n";
13410
13411 const Index n_p = abs_p.nelem(); // Number of pressure levels
13412 const Index n_f = f_grid.nelem(); // Number of frequencies
13413
13414 // Check that dimensions of abs_p, abs_t, and vmr agree:
13415 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13415
, "n_p==abs_t.nelem()") : (void)0)
;
13416 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13416
, "n_p==vmr.nelem()") : (void)0)
;
13417
13418 // Check that dimensions of pxsec are consistent with n_f
13419 // and n_p. It should be [n_f,n_p]:
13420 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13420
, "n_f==pxsec.nrows()") : (void)0)
;
13421 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13421
, "n_p==pxsec.ncols()") : (void)0)
;
13422
13423
13424 // Loop pressure/temperature:
13425 for ( Index i=0; i<n_p; ++i )
13426 {
13427 Numeric th = 300.0 / abs_t[i];
13428 // the vmr of H2O will be multiplied at the stage of absorption calculation:
13429 // abs / vmr * pxsec.
13430 Numeric strength = MPM93b1pcl * abs_p[i] * pow( th, (Numeric)3.5 )
13431 * exp(MPM93b2pcl * (1 - th));
13432 Numeric gam = MPM93b3pcl * 0.001 *
13433 ( MPM93b4pcl * abs_p[i] * vmr[i] * pow( th, MPM93b6pcl ) +
13434 abs_p[i]*(1.000-vmr[i]) * pow( th, MPM93b5pcl ) );
13435 // Loop frequency:
13436 for ( Index s=0; s<n_f; ++s )
13437 {
13438 // pxsec = abs/vmr [1/m] but MPM89 is in [dB/km] --> conversion necessary
13439 pxsec(s,i) += dB_km_to_1_m * 0.1820 *
13440 f_grid[s] * strength *
13441 MPMLineShapeFunction(gam, MPM93fopcl, f_grid[s]);
13442 }
13443 }
13444 return;
13445}
13446//
13447// #################################################################################
13448// ################################# OXYGEN MODELS #################################
13449// #################################################################################
13450//! MPM85O2AbsModel
13451/*!
13452 \param[out] pxsec cross section (absorption/volume mixing ratio) of
13453 O2 according to MPM89 [1/m]
13454 \param CCin scaling factor for the O2-continuum [1]
13455 \param CLin scaling factor for the O2-line strengths [1]
13456 \param CWin scaling factor for the O2-line widths [1]
13457 \param COin scaling factor for the O2-line coupling [1]
13458 \param model allows user defined input parameter set
13459 (CCin, CLin, CWin, and COin)<br> or choice of
13460 pre-defined parameters of specific models (see note below).
13461 \param f_grid predefined frequency grid [Hz]
13462 \param abs_p predefined pressure [Pa]
13463 \param abs_t predefined temperature grid [K]
13464 \param abs_h2o H2O volume mixing ratio profile [1]
13465 \param vmr O2 volume mixing ratio profile [1]
13466
13467 \note Except for model 'user' the input parameters CCin, CLin, CWin, and COin
13468 are neglected (model dominates over parameters).<br>
13469 Allowed models: 'MPM85', 'MPM85Lines', 'MPM85Continuum', 'MPM85NoCoupling',
13470 'MPM85NoCutoff', and 'user'. See the user guide for detailed explanations.
13471
13472 \remark Reference: H. J. Liebe,<br>
13473 <i>An updated model for millimeter wave propagation in moist air,</i>,<br>
13474 Radio Science, vol. 20, pp. 1069-1089, 1985
13475 \author Thomas Kuhn
13476 \date 2002-04-05
13477 */
13478
13479void MPM85O2AbsModel (MatrixView pxsec,
13480 const Numeric CCin, // continuum scale factor
13481 const Numeric CLin, // line strength scale factor
13482 const Numeric CWin, // line broadening scale factor
13483 const Numeric COin, // line coupling scale factor
13484 const String& model,
13485 ConstVectorView f_grid,
13486 ConstVectorView abs_p,
13487 ConstVectorView abs_t,
13488 ConstVectorView abs_h2o,
13489 ConstVectorView vmr,
13490 const Verbosity& verbosity)
13491{
13492 CREATE_OUT3ArtsOut3 out3(verbosity);
13493
13494 //
13495 // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
13496 // 0 1 2 3 4 5 6
13497 // f0 a1 a2 a3 a4 a5 a6
13498 // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa] [1]
13499 const Numeric mpm85[48][7] = {
13500 { 49.452379 , 0.12 , 11.830 , 8.40 , 0.0 , 5.600 , 1.700 },
13501 { 49.962257 , 0.34 , 10.720 , 8.50 , 0.0 , 5.600 , 1.700 },
13502 { 50.474238 , 0.94 , 9.690 , 8.60 , 0.0 , 5.600 , 1.700 },
13503 { 50.987748 , 2.46 , 8.690 , 8.70 , 0.0 , 5.500 , 1.700 },
13504 { 51.503350 , 6.08 , 7.740 , 8.90 , 0.0 , 5.600 , 1.800 },
13505 { 52.021409 , 14.14 , 6.840 , 9.20 , 0.0 , 5.500 , 1.800 },
13506 { 52.542393 , 31.02 , 6.000 , 9.40 , 0.0 , 5.700 , 1.800 },
13507 { 53.066906 , 64.10 , 5.220 , 9.70 , 0.0 , 5.300 , 1.900 },
13508 { 53.595748 , 124.70 , 4.480 , 10.00 , 0.0 , 5.400 , 1.800 },
13509 { 54.129999 , 228.00 , 3.810 , 10.20 , 0.0 , 4.800 , 2.000 },
13510 { 54.671157 , 391.80 , 3.190 , 10.50 , 0.0 , 4.800 , 1.900 },
13511 { 55.221365 , 631.60 , 2.620 , 10.79 , 0.0 , 4.170 , 2.100 },
13512 { 55.783800 , 953.50 , 2.115 , 11.10 , 0.0 , 3.750 , 2.100 },
13513 { 56.264777 , 548.90 , 0.010 , 16.46 , 0.0 , 7.740 , 0.900 },
13514 { 56.363387 , 1344.00 , 1.655 , 11.44 , 0.0 , 2.970 , 2.300 },
13515 { 56.968180 , 1763.00 , 1.255 , 11.81 , 0.0 , 2.120 , 2.500 },
13516 { 57.612481 , 2141.00 , 0.910 , 12.21 , 0.0 , 0.940 , 3.700 },
13517 { 58.323874 , 2386.00 , 0.621 , 12.66 , 0.0 , -0.550 , -3.100 },
13518 { 58.446589 , 1457.00 , 0.079 , 14.49 , 0.0 , 5.970 , 0.800 },
13519 { 59.164204 , 2404.00 , 0.386 , 13.19 , 0.0 , -2.440 , 0.100 },
13520 { 59.590982 , 2112.00 , 0.207 , 13.60 , 0.0 , 3.440 , 0.500 },
13521 { 60.306057 , 2124.00 , 0.207 , 13.82 , 0.0 , -4.130 , 0.700 },
13522 { 60.434775 , 2461.00 , 0.386 , 12.97 , 0.0 , 1.320 , -1.000 },
13523 { 61.150558 , 2504.00 , 0.621 , 12.48 , 0.0 , -0.360 , 5.800 },
13524 { 61.800152 , 2298.00 , 0.910 , 12.07 , 0.0 , -1.590 , 2.900 },
13525 { 62.411212 , 1933.00 , 1.255 , 11.71 , 0.0 , -2.660 , 2.300 },
13526 { 62.486253 , 1517.00 , 0.078 , 14.68 , 0.0 , -4.770 , 0.900 },
13527 { 62.997974 , 1503.00 , 1.660 , 11.39 , 0.0 , -3.340 , 2.200 },
13528 { 63.568515 , 1087.00 , 2.110 , 11.08 , 0.0 , -4.170 , 2.000 },
13529 { 64.127764 , 733.50 , 2.620 , 10.78 , 0.0 , -4.480 , 2.000 },
13530 { 64.678900 , 463.50 , 3.190 , 10.50 , 0.0 , -5.100 , 1.800 },
13531 { 65.224067 , 274.80 , 3.810 , 10.20 , 0.0 , -5.100 , 1.900 },
13532 { 65.764769 , 153.00 , 4.480 , 10.00 , 0.0 , -5.700 , 1.800 },
13533 { 66.302088 , 80.09 , 5.220 , 9.70 , 0.0 , -5.500 , 1.800 },
13534 { 66.836827 , 39.46 , 6.000 , 9.40 , 0.0 , -5.900 , 1.700 },
13535 { 67.369595 , 18.32 , 6.840 , 9.20 , 0.0 , -5.600 , 1.800 },
13536 { 67.900862 , 8.01 , 7.740 , 8.90 , 0.0 , -5.800 , 1.700 },
13537 { 68.431001 , 3.30 , 8.690 , 8.70 , 0.0 , -5.700 , 1.700 },
13538 { 68.960306 , 1.28 , 9.690 , 8.60 , 0.0 , -5.600 , 1.700 },
13539 { 69.489021 , 0.47 , 10.720 , 8.50 , 0.0 , -5.600 , 1.700 },
13540 { 70.017342 , 0.16 , 11.830 , 8.40 , 0.0 , -5.600 , 1.700 },
13541 { 118.750341 , 945.00 , 0.000 , 15.92 , 0.0 , -0.440 , 0.900 },
13542 { 368.498350 , 67.90 , 0.020 , 19.20 , 0.6 , 0.000 , 0.000 },
13543 { 424.763120 , 638.00 , 0.011 , 19.16 , 0.6 , 0.000 , 0.000 },
13544 { 487.249370 , 235.00 , 0.011 , 19.20 , 0.6 , 0.000 , 0.000 },
13545 { 715.393150 , 99.60 , 0.089 , 18.10 , 0.6 , 0.000 , 0.000 },
13546 { 773.838730 , 671.00 , 0.079 , 18.10 , 0.6 , 0.000 , 0.000 },
13547 { 834.145330 , 180.00 , 0.079 , 18.10 , 0.6 , 0.000 , 0.000 },
13548};
13549
13550 // number of lines of Liebe O2-line catalog (0-47 lines)
13551 const Index i_first = 0;
13552 const Index i_last = 47; // all the spec. lines up to 1THz
13553 // const Index i_last = 40; // only the 60GHz complex + 118GHz line
13554
13555
13556 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13557 // standard values for the MPM85 model (Liebe, Radio Science, 20, 1069-1089, 1985):
13558 const Numeric CC_MPM85 = 1.00000;
13559 const Numeric CL_MPM85 = 1.00000;
13560 const Numeric CW_MPM85 = 1.00000;
13561 const Numeric CO_MPM85 = 1.00000;
13562 int AppCutoff = 0;
13563 // ---------------------------------------------------------------------------------------
13564
13565
13566 // select the parameter set (!!model dominates values!!):
13567 Numeric CC, CL, CW, CO;
13568 if ( model == "MPM85" )
13569 {
13570 CC = CC_MPM85;
13571 CL = CL_MPM85;
13572 CW = CW_MPM85;
13573 CO = CO_MPM85;
13574 }
13575 else if ( model == "MPM85Lines" )
13576 {
13577 CC = 0.000;
13578 CL = CL_MPM85;
13579 CW = CW_MPM85;
13580 CO = CO_MPM85;
13581 }
13582 else if ( model == "MPM85Continuum" )
13583 {
13584 CC = CC_MPM85;
13585 CL = 0.000;
13586 CW = 0.000;
13587 CO = 0.000;
13588 }
13589 else if ( model == "MPM85NoCoupling" )
13590 {
13591 CC = CC_MPM85;
13592 CL = CL_MPM85;
13593 CW = CW_MPM85;
13594 CO = 0.000;
13595 }
13596 else if ( model == "MPM85NoCutoff" )
13597 {
13598 CC = CC_MPM85;
13599 CL = CL_MPM85;
13600 CW = CW_MPM85;
13601 CO = CO_MPM85;
13602 AppCutoff = 1;
13603 }
13604 else if ( model == "user" )
13605 {
13606 CC = CCin;
13607 CL = CLin;
13608 CW = CWin;
13609 CO = COin;
13610 }
13611 else
13612 {
13613 ostringstream os;
13614 os << "O2-MPM85: ERROR! Wrong model values given.\n"
13615 << "Valid models are: 'MPM85' 'MPM85Lines' 'MPM85Continuum' 'MPM85NoCoupling' 'MPM85NoCutoff'"
13616 << "and 'user'" << '\n';
13617 throw runtime_error(os.str());
13618 }
13619 out3 << "O2-MPM85: (model=" << model << ") parameter values in use:\n"
13620 << " CC = " << CC << "\n"
13621 << " CL = " << CL << "\n"
13622 << " CW = " << CW << "\n"
13623 << " CO = " << CO << "\n";
13624
13625
13626 // O2 continuum parameters of MPM92:
13627 const Numeric S0 = 6.140e-4; // line strength [ppm]
13628 const Numeric G0 = 5.600e-3; // line width [GHz/kPa]
13629 const Numeric X0 = 0.800; // temperature dependence of line width [1]
13630
13631 const Index n_p = abs_p.nelem(); // Number of pressure levels
13632 const Index n_f = f_grid.nelem(); // Number of frequencies
13633
13634 // const = VMR * ISORATIO = 0.20946 * 0.99519
13635 // this constant is already incorporated into the line strength, so we
13636 // have top devide the line strength by this value since arts multiplies pxsec
13637 // by these variables later in abs_coefCalc.
13638 const Numeric VMRISO = 0.2085;
13639
13640 // Check that dimensions of abs_p, abs_t, and vmr agree:
13641 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13641
, "n_p==abs_t.nelem()") : (void)0)
;
13642 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13642
, "n_p==vmr.nelem()") : (void)0)
;
13643
13644 // Check that dimensions of pxsec are consistent with n_f
13645 // and n_p. It should be [n_f,n_p]:
13646 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13646
, "n_f==pxsec.nrows()") : (void)0)
;
13647 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13647
, "n_p==pxsec.ncols()") : (void)0)
;
13648
13649 // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
13650 for ( Index i=0; i<n_p; ++i )
13651 {
13652 // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13653 if (vmr[i] == 0.)
13654 {
13655 pxsec(joker, i) = 0.;
13656 continue;
13657 }
13658
13659 // check if O2-VMR will cause an underflow due to division by zero:
13660 if (vmr[i] < VMRCalcLimit)
13661 {
13662 ostringstream os;
13663 os << "ERROR: MPM87 O2 full absorption model has detected a O2 volume mixing ratio of "
13664 << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
13665 << "Therefore no calculation is performed.\n";
13666 throw runtime_error(os.str());
13667 return;
13668 }
13669
13670 // relative inverse temperature [1]
13671 Numeric theta = (300.0 / abs_t[i]);
13672 // H2O partial pressure [kPa]
13673 Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
13674 // dry air partial pressure [kPa]
13675 Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
13676 // here the total pressure is devided by the O2 vmr for the
13677 // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
13678 Numeric pda_dummy = pda;
13679 // O2 continuum strength [ppm]
13680 Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
13681 // O2 continuum pseudo line broadening [GHz]
13682 Numeric gam_cont = G0 * ( pda + 1.10*pwv ) * pow( theta, X0 ); // GHz
13683
13684 // Loop over input frequency
13685 for ( Index s=0; s<n_f; ++s )
13686 {
13687 // input frequency in [GHz]
13688 Numeric ff = f_grid[s] * Hz_to_GHz;
13689 // O2 continuum absorption [1/m]
13690 // cross section: pxsec = absorption / var
13691 // the vmr of O2 will be multiplied at the stage of absorption calculation:
13692 // here the rolloff parameter FAC is implemented!
13693 // Numeric FAC = 1.000 / ( pow( ff, 2) + pow( 60.000, 2) );
13694 // if we let the non-proofen rollofff away as in further version:
13695 Numeric FAC = 1.000 ;
13696 Numeric Nppc = CC * strength_cont * FAC * ff * gam_cont /
13697 ( pow( ff, (Numeric)2.)
13698 + pow( gam_cont, (Numeric)2.) );
13699
13700 // Loop over MPM85 O2 spectral lines:
13701 Numeric Nppl = 0.0;
13702 for ( Index l = i_first; l <= i_last; ++l )
13703 {
13704 // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
13705 Numeric strength = CL * mpm85[l][1] * 1.000e-6 * pda_dummy *
13706 pow(theta, (Numeric)3.) * exp(mpm85[l][2]*(1.000-theta)) /
13707 mpm85[l][0];
13708 // line broadening parameter [GHz]
13709 Numeric gam = CW * ( mpm85[l][3] * 1.000e-3 *
13710 ( ( pda * pow(theta, ((Numeric)0.80-mpm85[l][4]))) +
13711 (1.10 * pwv * theta) ) );
13712 // line mixing parameter [1]
13713 Numeric delta = CO * mpm85[l][5] * 1.000e-3 *
13714 pda * pow(theta, mpm85[l][6]);
13715 // absorption [dB/km] like in the original MPM92
13716 Nppl += strength * MPMLineShapeO2Function(gam, mpm85[l][0], ff, delta);
13717 }
13718 // in MPM85 there is a cutoff for O2 line absorption if abs_l < 0
13719 // absorption cannot be less than 0 according to MPM87 philosophy.
13720 // since this cutoff is only 'detectable' in the source code and not in the
13721 // publications we assume this cutoff also for MPM85 since it is also
13722 // implemented in MPM87.
13723 if (AppCutoff == 0)
13724 {
13725 if (Nppl < 0.000) Nppl = 0.0000;
13726 }
13727 //
13728 // O2 line absorption [1/m]
13729 // cross section: pxsec = absorption / var
13730 // the vmr of O2 will be multiplied at the stage of absorption calculation:
13731 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
13732 }
13733 }
13734 return;
13735}
13736//
13737// #################################################################################
13738//! MPM87O2AbsModel
13739/*!
13740 \param[out] pxsec cross section (absorption/volume mixing ratio) of
13741 O2 according to MPM89 [1/m]
13742 \param CCin scaling factor for the O2-continuum [1]
13743 \param CLin scaling factor for the O2-line strengths [1]
13744 \param CWin scaling factor for the O2-line widths [1]
13745 \param COin scaling factor for the O2-line coupling [1]
13746 \param model allows user defined input parameter set
13747 (CCin, CLin, CWin, and COin)<br> or choice of
13748 pre-defined parameters of specific models (see note below).
13749 \param f_grid predefined frequency grid [Hz]
13750 \param abs_p predefined pressure [Pa]
13751 \param abs_t predefined temperature grid [K]
13752 \param abs_h2o H2O volume mixing ratio profile [1]
13753 \param vmr O2 volume mixing ratio profile [1]
13754
13755 \note Except for model 'user' the input parameters CCin, CLin, CWin, and COin
13756 are neglected (model dominates over parameters).<br>
13757 Allowed models: 'MPM87', 'MPM87Lines', 'MPM87Continuum', 'MPM87NoCoupling',
13758 'MPM87NoCutoff', and 'user'. See the user guide for detailed explanations.
13759
13760 \remark Reference: H. J. Liebe and D. H. Layton,<br>
13761 <i>Millimeter-wave properties of the atmosphere:
13762 Laboratory studies and propagation modelling</i>,<br>
13763 U.S. Dept. of Commerce, National Telecommunications and Information
13764 Administration, Institute for Communication Sciences, rep. 87-224,<br>
13765 325 Broadway, Boulder, CO 80303-3328
13766
13767 \author Thomas Kuhn
13768 \date 2002-04-05
13769 */
13770
13771void MPM87O2AbsModel (MatrixView pxsec,
13772 const Numeric CCin, // continuum scale factor
13773 const Numeric CLin, // line strength scale factor
13774 const Numeric CWin, // line broadening scale factor
13775 const Numeric COin, // line coupling scale factor
13776 const String& model,
13777 ConstVectorView f_grid,
13778 ConstVectorView abs_p,
13779 ConstVectorView abs_t,
13780 ConstVectorView abs_h2o,
13781 ConstVectorView vmr,
13782 const Verbosity& verbosity)
13783{
13784 CREATE_OUT3ArtsOut3 out3(verbosity);
13785
13786 //
13787 // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
13788 // 0 1 2 3 4 5 6
13789 // f0 a1 a2 a3 a4 a5 a6
13790 // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa]
13791 const Numeric mpm87[48][7] = {
13792 { 49.452379 , 0.12 , 11.830 , 8.40 , 0.0 , 6.600 , 1.700}, // 0
13793 { 49.962257 , 0.34 , 10.720 , 8.50 , 0.0 , 6.600 , 1.700}, // 1
13794 { 50.474238 , 0.94 , 9.690 , 8.60 , 0.0 , 6.600 , 1.700}, // 2
13795 { 50.987748 , 2.46 , 8.690 , 8.70 , 0.0 , 6.500 , 1.700}, // 3
13796 { 51.503350 , 6.08 , 7.740 , 8.90 , 0.0 , 6.627 , 1.800}, // 4
13797 { 52.021409 , 14.14 , 6.840 , 9.20 , 0.0 , 6.347 , 1.800}, // 5
13798 { 52.542393 , 31.02 , 6.000 , 9.40 , 0.0 , 6.046 , 1.800}, // 6
13799 { 53.066906 , 64.10 , 5.220 , 9.70 , 0.0 , 5.719 , 1.900}, // 7
13800 { 53.595748 , 124.70 , 4.480 , 10.00 , 0.0 , 5.400 , 1.800}, // 8
13801 { 54.129999 , 228.00 , 3.810 , 10.20 , 0.0 , 5.157 , 2.000}, // 9
13802 { 54.671157 , 391.80 , 3.190 , 10.50 , 0.0 , 4.783 , 1.900}, // 10
13803 { 55.221365 , 631.60 , 2.620 , 10.79 , 0.0 , 4.339 , 2.100}, // 11
13804 { 55.783800 , 953.50 , 2.115 , 11.10 , 0.0 , 4.011 , 2.100}, // 12
13805 { 56.264777 , 548.90 , 0.010 , 16.46 , 0.0 , 2.772 , 0.900}, // 13
13806 { 56.363387 , 1344.00 , 1.655 , 11.44 , 0.0 , 3.922 , 2.300}, // 14
13807 { 56.968180 , 1763.00 , 1.255 , 11.81 , 0.0 , 3.398 , 2.500}, // 15
13808 { 57.612481 , 2141.00 , 0.910 , 12.21 , 0.0 , 1.145 , 3.200}, // 16
13809 { 58.323874 , 2386.00 , 0.621 , 12.66 , 0.0 , -0.317 , -2.500}, // 17
13810 { 58.446589 , 1457.00 , 0.079 , 14.49 , 0.0 , 6.270 , 0.800}, // 18
13811 { 59.164204 , 2404.00 , 0.386 , 13.19 , 0.0 , -4.119 , 0.100}, // 19
13812 { 59.590982 , 2112.00 , 0.207 , 13.60 , 0.0 , 6.766 , 0.500}, // 20
13813 { 60.306057 , 2124.00 , 0.207 , 13.82 , 0.0 , -6.183 , 0.700}, // 21
13814 { 60.434775 , 2461.00 , 0.386 , 12.97 , 0.0 , 3.290 , -0.400}, // 22
13815 { 61.150558 , 2504.00 , 0.621 , 12.48 , 0.0 , -1.591 , 3.500}, // 23
13816 { 61.800152 , 2298.00 , 0.910 , 12.07 , 0.0 , -2.068 , 2.900}, // 24
13817 { 62.411212 , 1933.00 , 1.255 , 11.71 , 0.0 , -4.158 , 2.300}, // 25
13818 { 62.486253 , 1517.00 , 0.078 , 14.68 , 0.0 , -4.068 , 0.900}, // 26
13819 { 62.997974 , 1503.00 , 1.660 , 11.39 , 0.0 , -4.482 , 2.200}, // 27
13820 { 63.568515 , 1087.00 , 2.110 , 11.08 , 0.0 , -4.442 , 2.000}, // 28
13821 { 64.127764 , 733.50 , 2.620 , 10.78 , 0.0 , -4.687 , 2.000}, // 29
13822 { 64.678900 , 463.50 , 3.190 , 10.50 , 0.0 , -5.074 , 1.800}, // 30
13823 { 65.224067 , 274.80 , 3.810 , 10.20 , 0.0 , -5.403 , 1.900}, // 31
13824 { 65.764769 , 153.00 , 4.480 , 10.00 , 0.0 , -5.610 , 1.800}, // 32
13825 { 66.302088 , 80.09 , 5.220 , 9.70 , 0.0 , -5.896 , 1.800}, // 33
13826 { 66.836827 , 39.46 , 6.000 , 9.40 , 0.0 , -6.194 , 1.700}, // 34
13827 { 67.369595 , 18.32 , 6.840 , 9.20 , 0.0 , -6.468 , 1.800}, // 35
13828 { 67.900862 , 8.01 , 7.740 , 8.90 , 0.0 , -6.718 , 1.700}, // 36
13829 { 68.431001 , 3.30 , 8.690 , 8.70 , 0.0 , -6.700 , 1.700}, // 37
13830 { 68.960306 , 1.28 , 9.690 , 8.60 , 0.0 , -6.600 , 1.700}, // 38
13831 { 69.489021 , 0.47 , 10.720 , 8.50 , 0.0 , -6.600 , 1.700}, // 39
13832 { 70.017342 , 0.16 , 11.830 , 8.40 , 0.0 , -6.600 , 1.700}, // 40
13833 { 118.750341 , 945.00 , 0.000 , 16.30 , 0.0 , -0.134 , 0.800}, // 41
13834 { 368.498350 , 67.90 , 0.020 , 19.20 , 0.6 , 0.000 , 0.000}, // 42
13835 { 424.763120 , 638.00 , 0.011 , 19.16 , 0.6 , 0.000 , 0.000}, // 43
13836 { 487.249370 , 235.00 , 0.011 , 19.20 , 0.6 , 0.000 , 0.000}, // 44
13837 { 715.393150 , 99.60 , 0.089 , 18.10 , 0.6 , 0.000 , 0.000}, // 45
13838 { 773.838730 , 671.00 , 0.079 , 18.10 , 0.6 , 0.000 , 0.000}, // 46
13839 { 834.145330 , 180.00 , 0.079 , 18.10 , 0.6 , 0.000 , 0.000} // 47
13840 };
13841
13842 // number of lines of Liebe O2-line catalog (0-47 lines)
13843 const Index i_first = 0;
13844 const Index i_last = 47; // all the spec. lines up to 1THz
13845 // const Index i_last = 40; // only the 60GHz complex + 118GHz line
13846
13847
13848 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
13849 // standard values for the MPM87 model (NITA Report 87-224):
13850 const Numeric CC_MPM87 = 1.00000;
13851 const Numeric CL_MPM87 = 1.00000;
13852 const Numeric CW_MPM87 = 1.00000;
13853 const Numeric CO_MPM87 = 1.00000;
13854 int AppCutoff = 0;
13855 // ---------------------------------------------------------------------------------------
13856
13857
13858 // select the parameter set (!!model dominates values!!):
13859 Numeric CC, CL, CW, CO;
13860 if ( model == "MPM87" )
13861 {
13862 CC = CC_MPM87;
13863 CL = CL_MPM87;
13864 CW = CW_MPM87;
13865 CO = CO_MPM87;
13866 }
13867 else if ( model == "MPM87Lines" )
13868 {
13869 CC = 0.000;
13870 CL = CL_MPM87;
13871 CW = CW_MPM87;
13872 CO = CO_MPM87;
13873 }
13874 else if ( model == "MPM87Continuum" )
13875 {
13876 CC = CC_MPM87;
13877 CL = 0.000;
13878 CW = 0.000;
13879 CO = 0.000;
13880 }
13881 else if ( model == "MPM87NoCoupling" )
13882 {
13883 CC = CC_MPM87;
13884 CL = CL_MPM87;
13885 CW = CW_MPM87;
13886 CO = 0.000;
13887 }
13888 else if ( model == "MPM87NoCutoff" )
13889 {
13890 // !!ATTENTION!!
13891 // In the window regions the total absorption can get negative values.
13892 // So be carefull with this selection!
13893 CC = CC_MPM87;
13894 CL = CL_MPM87;
13895 CW = CW_MPM87;
13896 CO = CO_MPM87;
13897 AppCutoff = 1;
13898 }
13899 else if ( model == "user" )
13900 {
13901 CC = CCin;
13902 CL = CLin;
13903 CW = CWin;
13904 CO = COin;
13905 }
13906 else
13907 {
13908 ostringstream os;
13909 os << "O2-MPM87: ERROR! Wrong model values given.\n"
13910 << "Valid models are: 'MPM87' 'MPM87Lines' 'MPM87Continuum' 'MPM87NoCoupling' 'MPM87NoCutoff'"
13911 << "and 'user'" << '\n';
13912 throw runtime_error(os.str());
13913 }
13914 out3 << "O2-MPM87: (model=" << model << ") parameter values in use:\n"
13915 << " CC = " << CC << "\n"
13916 << " CL = " << CL << "\n"
13917 << " CW = " << CW << "\n"
13918 << " CO = " << CO << "\n";
13919
13920
13921 // O2 continuum parameters of MPM92:
13922 const Numeric S0 = 6.140e-4; // line strength [ppm]
13923 const Numeric G0 = 4.800e-3; // line width [GHz/kPa] !! 14% lower than in all the other versions !!
13924 const Numeric X0 = 0.800; // temperature dependence of line width [1]
13925
13926 const Index n_p = abs_p.nelem(); // Number of pressure levels
13927 const Index n_f = f_grid.nelem(); // Number of frequencies
13928
13929 // const = VMR * ISORATIO = 0.20946 * 0.99519
13930 // this constant is already incorporated into the line strength, so we
13931 // have top devide the line strength by this value since arts multiplies pxsec
13932 // by these variables later in abs_coefCalc.
13933 const Numeric VMRISO = 0.2085;
13934
13935 // Check that dimensions of abs_p, abs_t, and vmr agree:
13936 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13936
, "n_p==abs_t.nelem()") : (void)0)
;
13937 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13937
, "n_p==vmr.nelem()") : (void)0)
;
13938
13939 // Check that dimensions of pxsec are consistent with n_f
13940 // and n_p. It should be [n_f,n_p]:
13941 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13941
, "n_f==pxsec.nrows()") : (void)0)
;
13942 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 13942
, "n_p==pxsec.ncols()") : (void)0)
;
13943
13944 // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
13945 for ( Index i=0; i<n_p; ++i )
13946 {
13947 // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
13948 if (vmr[i] == 0.)
13949 {
13950 pxsec(joker, i) = 0.;
13951 continue;
13952 }
13953
13954 // check if O2-VMR will cause an underflow due to division by zero:
13955 if (vmr[i] < VMRCalcLimit)
13956 {
13957 ostringstream os;
13958 os << "ERROR: MPM87 O2 full absorption model has detected a O2 volume mixing ratio of "
13959 << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
13960 << "Therefore no calculation is performed.\n";
13961 throw runtime_error(os.str());
13962 return;
13963 }
13964
13965 // relative inverse temperature [1]
13966 Numeric theta = (300.0 / abs_t[i]);
13967 // H2O partial pressure [kPa]
13968 Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
13969 // dry air partial pressure [kPa]
13970 Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
13971 // here the total pressure is devided by the O2 vmr for the
13972 // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
13973 Numeric pda_dummy = pda;
13974 // O2 continuum strength [ppm]
13975 Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
13976 // O2 continuum pseudo line broadening [GHz]
13977 Numeric gam_cont = G0 * ( pda + 1.10*pwv ) * pow( theta, X0 ); // GHz
13978
13979 // Loop over input frequency
13980 for ( Index s=0; s<n_f; ++s )
13981 {
13982 // input frequency in [GHz]
13983 Numeric ff = f_grid[s] * Hz_to_GHz;
13984 // O2 continuum absorption [1/m]
13985 // cross section: pxsec = absorption / var
13986 // the vmr of O2 will be multiplied at the stage of absorption calculation:
13987 Numeric Nppc = CC * strength_cont * ff * gam_cont /
13988 ( pow( ff, (Numeric)2.) + pow( gam_cont, (Numeric)2.) );
13989
13990 // Loop over MPM87 O2 spectral lines:
13991 Numeric Nppl = 0.0;
13992 for ( Index l = i_first; l <= i_last; ++l )
13993 {
13994 // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
13995 Numeric strength = CL * mpm87[l][1] * 1.000e-6 * pda_dummy *
13996 pow(theta, (Numeric)3.) * exp(mpm87[l][2]*(1.000-theta)) /
13997 mpm87[l][0];
13998 // line broadening parameter [GHz]
13999 Numeric gam = CW * ( mpm87[l][3] * 1.000e-3 *
14000 ( ( pda * pow(theta, ((Numeric)0.80-mpm87[l][4]))) +
14001 (1.10 * pwv * theta) ) );
14002 // line mixing parameter [1]
14003 Numeric delta = CO * mpm87[l][5] * 1.000e-3 *
14004 pda * pow(theta, mpm87[l][6]);
14005 // absorption [dB/km] like in the original MPM92
14006 Nppl += strength * MPMLineShapeO2Function(gam, mpm87[l][0], ff, delta);
14007 }
14008 // in MPM87 there is a cutoff for O2 line absorption if abs_l < 0
14009 // absorption cannot be less than 0 according to MPM87 source code.
14010 if (AppCutoff == 0)
14011 {
14012 if (Nppl < 0.000) Nppl = 0.0000;
14013 }
14014 //
14015 // O2 line absorption [1/m]
14016 // cross section: pxsec = absorption / var
14017 // the vmr of O2 will be multiplied at the stage of absorption calculation:
14018 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
14019 }
14020 }
14021 return;
14022}
14023//
14024// #################################################################################
14025//! MPM89O2AbsModel
14026/*!
14027 \param[out] pxsec cross section (absorption/volume mixing ratio) of
14028 O2 according to MPM89 [1/m]
14029 \param CCin scaling factor for the O2-continuum [1]
14030 \param CLin scaling factor for the O2-line strengths [1]
14031 \param CWin scaling factor for the O2-line widths [1]
14032 \param COin scaling factor for the O2-line coupling [1]
14033 \param model allows user defined input parameter set
14034 (CCin, CLin, CWin, and COin)<br> or choice of
14035 pre-defined parameters of specific models (see note below).
14036 \param f_grid predefined frequency grid [Hz]
14037 \param abs_p predefined pressure [Pa]
14038 \param abs_t predefined temperature grid [K]
14039 \param abs_h2o H2O volume mixing ratio profile [1]
14040 \param vmr O2 volume mixing ratio profile [1]
14041
14042 \note Except for model 'user' the input parameters CCin, CLin, CWin, and COin
14043 are neglected (model dominates over parameters).<br>
14044 Allowed models: 'MPM89', 'MPM89Lines', 'MPM89Continuum', 'MPM89NoCoupling',
14045 'MPM89NoCutoff', and 'user'. See the user guide for detailed explanations.
14046
14047 \remark Reference: H. J. Liebe,<br>
14048 <i>MPM - an atmospheric millimeter-wave propagation model</i>,<br>
14049 Int. J. Infrared and Mill. Waves, Vol 10, pp. 631-650, 1989.
14050
14051 \author Thomas Kuhn
14052 \date 2002-04-05
14053 */
14054
14055void MPM89O2AbsModel (MatrixView pxsec,
14056 const Numeric CCin, // continuum scale factor
14057 const Numeric CLin, // line strength scale factor
14058 const Numeric CWin, // line broadening scale factor
14059 const Numeric COin, // line coupling scale factor
14060 const String& model,
14061 ConstVectorView f_grid,
14062 ConstVectorView abs_p,
14063 ConstVectorView abs_t,
14064 ConstVectorView abs_h2o,
14065 ConstVectorView vmr,
14066 const Verbosity& verbosity)
14067{
14068 CREATE_OUT3ArtsOut3 out3(verbosity);
14069
14070 //
14071 // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
14072 // 0 1 2 3 4 5 6
14073 // f0 a1 a2 a3 a4 a5 a6
14074 // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [1/kPa]
14075 const Numeric mpm89[44][7] = {
14076 { 50.474238, 0.94 , 9.694 , 8.60 , 0.0 , 1.600 , 5.520 }, // 0
14077 { 50.987749, 2.46 , 8.694 , 8.70 , 0.0 , 1.400 , 5.520 }, // 1
14078 { 51.503350, 6.08 , 7.744 , 8.90 , 0.0 , 1.165 , 5.520 }, // 2
14079 { 52.021410, 14.14 , 6.844 , 9.20 , 0.0 , 0.883 , 5.520 }, // 3
14080 { 52.542394, 31.02 , 6.004 , 9.40 , 0.0 , 0.579 , 5.520 }, // 4
14081 { 53.066907, 64.10 , 5.224 , 9.70 , 0.0 , 0.252 , 5.520 }, // 5
14082 { 53.595749, 124.70 , 4.484 , 10.00 , 0.0 , -0.066 , 5.520 }, // 6
14083 { 54.130000, 228.00 , 3.814 , 10.20 , 0.0 , -0.314 , 5.520 }, // 7
14084 { 54.671159, 391.80 , 3.194 , 10.50 , 0.0 , -0.706 , 5.520 }, // 8
14085 { 55.221367, 631.60 , 2.624 , 10.79 , 0.0 , -1.151 , 5.514 }, // 9
14086 { 55.783802, 953.50 , 2.119 , 11.10 , 0.0 , -0.920 , 5.025 }, // 10
14087 { 56.264775, 548.90 , 0.015 , 16.46 , 0.0 , 2.881 , -0.069 }, // 11
14088 { 56.363389, 1344.00 , 1.660 , 11.44 , 0.0 , -0.596 , 4.750 }, // 12
14089 { 56.968206, 1763.00 , 1.260 , 11.81 , 0.0 , -0.556 , 4.104 }, // 13
14090 { 57.612484, 2141.00 , 0.915 , 12.21 , 0.0 , -2.414 , 3.536 }, // 14
14091 { 58.323877, 2386.00 , 0.626 , 12.66 , 0.0 , -2.635 , 2.686 }, // 15
14092 { 58.446590, 1457.00 , 0.084 , 14.49 , 0.0 , 6.848 , -0.647 }, // 16
14093 { 59.164207, 2404.00 , 0.391 , 13.19 , 0.0 , -6.032 , 1.858 }, // 17
14094 { 59.590983, 2112.00 , 0.212 , 13.60 , 0.0 , 8.266 , -1.413 }, // 18
14095 { 60.306061, 2124.00 , 0.212 , 13.82 , 0.0 , -7.170 , 0.916 }, // 19
14096 { 60.434776, 2461.00 , 0.391 , 12.97 , 0.0 , 5.664 , -2.323 }, // 20
14097 { 61.150560, 2504.00 , 0.626 , 12.48 , 0.0 , 1.731 , -3.039 }, // 21
14098 { 61.800154, 2298.00 , 0.915 , 12.07 , 0.0 , 1.738 , -3.797 }, // 22
14099 { 62.411215, 1933.00 , 1.260 , 11.71 , 0.0 , -0.048 , -4.277 }, // 23
14100 { 62.486260, 1517.00 , 0.083 , 14.68 , 0.0 , -4.290 , 0.238 }, // 24
14101 { 62.997977, 1503.00 , 1.665 , 11.39 , 0.0 , 0.134 , -4.860 }, // 25
14102 { 63.568518, 1087.00 , 2.115 , 11.08 , 0.0 , 0.541 , -5.079 }, // 26
14103 { 64.127767, 733.50 , 2.620 , 10.78 , 0.0 , 0.814 , -5.525 }, // 27
14104 { 64.678903, 463.50 , 3.195 , 10.50 , 0.0 , 0.415 , -5.520 }, // 28
14105 { 65.224071, 274.80 , 3.815 , 10.20 , 0.0 , 0.069 , -5.520 }, // 29
14106 { 65.764772, 153.00 , 4.485 , 10.00 , 0.0 , -0.143 , -5.520 }, // 30
14107 { 66.302091, 80.09 , 5.225 , 9.70 , 0.0 , -0.428 , -5.520 }, // 31
14108 { 66.836830, 39.46 , 6.005 , 9.40 , 0.0 , -0.726 , -5.520 }, // 32
14109 { 67.369598, 18.32 , 6.845 , 9.20 , 0.0 , -1.002 , -5.520 }, // 33
14110 { 67.900867, 8.01 , 7.745 , 8.90 , 0.0 , -1.255 , -5.520 }, // 34
14111 { 68.431005, 3.30 , 8.695 , 8.70 , 0.0 , -1.500 , -5.520 }, // 35
14112 { 68.960311, 1.28 , 9.695 , 8.60 , 0.0 , -1.700 , -5.520 }, // 36
14113 { 118.750343, 945.00 , 0.009 , 16.30 , 0.0 , -0.247 , 0.003 }, // 37
14114 { 368.498350, 67.90 , 0.049 , 19.20 , 0.6 , 0.000 , 0.000 }, // 38
14115 { 424.763124, 638.00 , 0.044 , 19.16 , 0.6 , 0.000 , 0.000 }, // 39
14116 { 487.249370, 235.00 , 0.049 , 19.20 , 0.6 , 0.000 , 0.000 }, // 40
14117 { 715.393150, 99.60 , 0.145 , 18.10 , 0.6 , 0.000 , 0.000 }, // 41
14118 { 773.839675, 671.00 , 0.130 , 18.10 , 0.6 , 0.000 , 0.000 }, // 42
14119 { 834.145330, 180.00 , 0.147 , 18.10 , 0.6 , 0.000 , 0.000 } // 43
14120 };
14121
14122 // number of lines of Liebe O2-line catalog (0-43 lines)
14123 const Index i_first = 0;
14124 const Index i_last = 43; // all the spec. lines up to 1THz
14125 // const Index i_last = 37; // only the 60GHz complex + 118GHz line
14126
14127
14128 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14129 // standard values for the MPM89 model (IJIMW, Vol 10, pp. 631-650, 1989):
14130 const Numeric CC_MPM89 = 1.00000;
14131 const Numeric CL_MPM89 = 1.00000;
14132 const Numeric CW_MPM89 = 1.00000;
14133 const Numeric CO_MPM89 = 1.00000;
14134 int AppCutoff = 0;
14135 // ---------------------------------------------------------------------------------------
14136
14137
14138 // select the parameter set (!!model dominates values!!):
14139 Numeric CC, CL, CW, CO;
14140 if ( model == "MPM89" )
14141 {
14142 CC = CC_MPM89;
14143 CL = CL_MPM89;
14144 CW = CW_MPM89;
14145 CO = CO_MPM89;
14146 }
14147 else if ( model == "MPM89Lines" )
14148 {
14149 CC = 0.000;
14150 CL = CL_MPM89;
14151 CW = CW_MPM89;
14152 CO = CO_MPM89;
14153 }
14154 else if ( model == "MPM89Continuum" )
14155 {
14156 CC = CC_MPM89;
14157 CL = 0.000;
14158 CW = 0.000;
14159 CO = 0.000;
14160 }
14161 else if ( model == "MPM89NoCoupling" )
14162 {
14163 CC = CC_MPM89;
14164 CL = CL_MPM89;
14165 CW = CW_MPM89;
14166 CO = 0.000;
14167 }
14168 else if ( model == "MPM89NoCutoff" )
14169 {
14170 CC = CC_MPM89;
14171 CL = CL_MPM89;
14172 CW = CW_MPM89;
14173 CO = CO_MPM89;
14174 AppCutoff = 1;
14175 }
14176 else if ( model == "user" )
14177 {
14178 CC = CCin;
14179 CL = CLin;
14180 CW = CWin;
14181 CO = COin;
14182 }
14183 else
14184 {
14185 ostringstream os;
14186 os << "O2-MPM89: ERROR! Wrong model values given.\n"
14187 << "Valid models are: 'MPM89' 'MPM89Lines' 'MPM89Continuum' 'MPM89NoCoupling' 'MPM89NoCutoff'"
14188 << "and 'user'" << '\n';
14189 throw runtime_error(os.str());
14190 }
14191 out3 << "O2-MPM89: (model=" << model << ") parameter values in use:\n"
14192 << " CC = " << CC << "\n"
14193 << " CL = " << CL << "\n"
14194 << " CW = " << CW << "\n"
14195 << " CO = " << CO << "\n";
14196
14197
14198 // O2 continuum parameters of MPM92:
14199 const Numeric S0 = 6.140e-4; // line strength [ppm]
14200 const Numeric G0 = 5.60e-3; // line width [GHz/kPa]
14201 const Numeric X0 = 0.800; // temperature dependence of line width [1]
14202
14203 const Index n_p = abs_p.nelem(); // Number of pressure levels
14204 const Index n_f = f_grid.nelem(); // Number of frequencies
14205
14206 // const = VMR * ISORATIO = 0.20946 * 0.99519
14207 // this constant is already incorporated into the line strength, so we
14208 // have top devide the line strength by this value since arts multiplies pxsec
14209 // by these variables later in abs_coefCalc.
14210 const Numeric VMRISO = 0.2085;
14211
14212 // Check that dimensions of abs_p, abs_t, and vmr agree:
14213 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14213
, "n_p==abs_t.nelem()") : (void)0)
;
14214 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14214
, "n_p==vmr.nelem()") : (void)0)
;
14215
14216 // Check that dimensions of pxsec are consistent with n_f
14217 // and n_p. It should be [n_f,n_p]:
14218 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14218
, "n_f==pxsec.nrows()") : (void)0)
;
14219 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14219
, "n_p==pxsec.ncols()") : (void)0)
;
14220
14221 // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
14222 for ( Index i=0; i<n_p; ++i )
14223 {
14224 // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
14225 if (vmr[i] == 0.)
14226 {
14227 pxsec(joker, i) = 0.;
14228 continue;
14229 }
14230
14231 // check if O2-VMR will cause an underflow due to division by zero:
14232 if (vmr[i] < VMRCalcLimit)
14233 {
14234 ostringstream os;
14235 os << "ERROR: MPM89 O2 full absorption model has detected a O2 volume mixing ratio of "
14236 << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
14237 << "Therefore no calculation is performed.\n";
14238 throw runtime_error(os.str());
14239 return;
14240 }
14241
14242 // relative inverse temperature [1]
14243 Numeric theta = (300.0 / abs_t[i]);
14244 // H2O partial pressure [kPa]
14245 Numeric pwv = Pa_to_kPa * abs_p[i] * abs_h2o[i];
14246 // dry air partial pressure [kPa]
14247 Numeric pda = (Pa_to_kPa * abs_p[i]) - pwv;
14248 // here the total pressure is devided by the O2 vmr for the
14249 // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
14250 Numeric pda_dummy = pda;
14251 // O2 continuum strength [ppm]
14252 Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
14253 // O2 continuum pseudo line broadening [GHz]
14254 Numeric gam_cont = G0 * (pwv+pda) * pow( theta, X0 ); // GHz
14255
14256 // Loop over input frequency
14257 for ( Index s=0; s<n_f; ++s )
14258 {
14259 // input frequency in [GHz]
14260 Numeric ff = f_grid[s] * Hz_to_GHz;
14261 // O2 continuum absorption [1/m]
14262 // cross section: pxsec = absorption / var
14263 // the vmr of O2 will be multiplied at the stage of absorption calculation:
14264 Numeric Nppc = CC * strength_cont * ff * gam_cont /
14265 ( pow( ff, (Numeric)2.) + pow( gam_cont, (Numeric)2.) );
14266
14267 // Loop over MPM89 O2 spectral lines:
14268 Numeric Nppl = 0.0;
14269 for ( Index l = i_first; l <= i_last; ++l )
14270 {
14271 // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
14272 Numeric strength = CL * mpm89[l][1] * 1.000e-6 * pda_dummy *
14273 pow(theta, (Numeric)3.) * exp(mpm89[l][2]*(1.000-theta)) /
14274 mpm89[l][0];
14275 // line broadening parameter [GHz]
14276 Numeric gam = CW * ( mpm89[l][3] * 1.000e-3 *
14277 ( ( pda * pow(theta, ((Numeric)0.80-mpm89[l][4]))) +
14278 (1.10 * pwv * theta) ) );
14279 // line mixing parameter [1]
14280 Numeric delta = CO * ( (mpm89[l][5] + mpm89[l][6] * theta) * 1.000e-3 *
14281 pda * pow(theta, (Numeric)0.8) );
14282 // absorption [dB/km] like in the original MPM92
14283 Nppl += strength * MPMLineShapeO2Function(gam, mpm89[l][0], ff, delta);
14284 }
14285 // in MPM89 we adopt the cutoff for O2 line absorption if abs_l < 0
14286 // absorption cannot be less than 0 according to MPM87 source code.
14287 if (AppCutoff == 0)
14288 {
14289 if (Nppl < 0.000) Nppl = 0.0000;
14290 }
14291 //
14292 // O2 line absorption [1/m]
14293 // cross section: pxsec = absorption / var
14294 // the vmr of O2 will be multiplied at the stage of absorption calculation:
14295 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
14296 }
14297 }
14298 return;
14299}
14300//
14301// #################################################################################
14302//
14303//! MPM92O2AbsModel
14304/*!
14305 \param[out] pxsec cross section (absorption/volume mixing ratio) of
14306 O2 according to MPM93 [1/m]
14307 \param CCin scaling factor for the O2-continuum [1]
14308 \param CLin scaling factor for the O2-line strengths [1]
14309 \param CWin scaling factor for the O2-line widths [1]
14310 \param COin scaling factor for the O2-line coupling [1]
14311 \param model allows user defined input parameter set
14312 (CCin, CLin, CWin, and COin)<br> or choice of
14313 pre-defined parameters of specific models (see note below).
14314 \param f_grid predefined frequency grid [Hz]
14315 \param abs_p predefined pressure [Pa]
14316 \param abs_t predefined temperature grid [K]
14317 \param abs_h2o H2O volume mixing ratio profile [1]
14318 \param vmr O2 volume mixing ratio profile [1]
14319
14320 \note Except for model 'user' the input parameters CCin, CLin, CWin, and COin
14321 are neglected (model dominates over parameters).<br>
14322 Allowed models: 'MPM92', 'MPM92Lines', 'MPM92Continuum', 'MPM92NoCoupling',
14323 'MPM92NoCutoff', and 'user'. See the user guide for detailed explanations.
14324
14325 \remark Reference: H. J. Liebe, P. W. Rosenkranz and G. A. Hufford,<br>
14326 <i>Atmospheric 60-GHz Oxygen Spectrum: New Laboratory Measurements
14327 and Line Parameters</i>,<br>
14328 JQSRT, Vol 48, pp. 629-643, 1992
14329
14330 \author Thomas Kuhn
14331 \date 2001-11-05
14332 */
14333
14334void MPM92O2AbsModel (MatrixView pxsec,
14335 const Numeric CCin, // continuum scale factor
14336 const Numeric CLin, // line strength scale factor
14337 const Numeric CWin, // line broadening scale factor
14338 const Numeric COin, // line coupling scale factor
14339 const String& model,
14340 ConstVectorView f_grid,
14341 ConstVectorView abs_p,
14342 ConstVectorView abs_t,
14343 ConstVectorView abs_h2o,
14344 ConstVectorView vmr,
14345 const Verbosity& verbosity)
14346{
14347 CREATE_OUT3ArtsOut3 out3(verbosity);
14348
14349 //
14350 // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
14351 // 0 1 2 3 4 5 6
14352 // f0 a1 a2 a3 a4 a5 a6
14353 // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
14354 const Numeric mpm92[44][7] = {
14355 { 50.474238, 0.094, 9.694, 0.850, 0.0, 0.210, 0.685}, // 0
14356 { 50.987749, 0.246, 8.694, 0.870, 0.0, 0.190, 0.680}, // 1
14357 { 51.503350, 0.608, 7.744, 0.890, 0.0, 0.171, 0.673}, // 2
14358 { 52.021410, 1.414, 6.844, 0.920, 0.0, 0.144, 0.664}, // 3
14359 { 52.542394, 3.102, 6.004, 0.940, 0.0, 0.118, 0.653}, // 4
14360 { 53.066907, 6.410, 5.224, 0.970, 0.0, 0.114, 0.621}, // 5
14361 { 53.595749, 12.470, 4.484, 1.000, 0.0, 0.200, 0.508}, // 6
14362 { 54.130000, 22.800, 3.814, 1.020, 0.0, 0.291, 0.375}, // 7
14363 { 54.671159, 39.180, 3.194, 1.050, 0.0, 0.325, 0.265}, // 8
14364 { 55.221367, 63.160, 2.624, 1.080, 0.0, 0.224, 0.295}, // 9
14365 { 55.783802, 95.350, 2.119, 1.110, 0.0, -0.144, 0.613}, // 0
14366 { 56.264775, 54.890, 0.015, 1.646, 0.0, 0.339, -0.098}, // 11
14367 { 56.363389, 134.400, 1.660, 1.144, 0.0, -0.258, 0.655}, // 12
14368 { 56.968206, 176.300, 1.260, 1.181, 0.0, -0.362, 0.645}, // 13
14369 { 57.612484, 214.100, 0.915, 1.221, 0.0, -0.533, 0.606}, // 14
14370 { 58.323877, 238.600, 0.626, 1.266, 0.0, -0.178, 0.044}, // 15
14371 { 58.446590, 145.700, 0.084, 1.449, 0.0, 0.650, -0.127}, // 16
14372 { 59.164207, 240.400, 0.391, 1.319, 0.0, -0.628, 0.231}, // 17
14373 { 59.590983, 211.200, 0.212, 1.360, 0.0, 0.665, -0.078}, // 18
14374 { 60.306061, 212.400, 0.212, 1.382, 0.0, -0.613, 0.070}, // 19
14375 { 60.434776, 246.100, 0.391, 1.297, 0.0, 0.606, -0.282}, // 20
14376 { 61.150560, 250.400, 0.626, 1.248, 0.0, 0.090, -0.058}, // 21
14377 { 61.800154, 229.800, 0.915, 1.207, 0.0, 0.496, -0.662}, // 22
14378 { 62.411215, 193.300, 1.260, 1.171, 0.0, 0.313, -0.676}, // 23
14379 { 62.486260, 151.700, 0.083, 1.468, 0.0, -0.433, 0.084}, // 24
14380 { 62.997977, 150.300, 1.665, 1.139, 0.0, 0.208, -0.668}, // 25
14381 { 63.568518, 108.700, 2.115, 1.110, 0.0, 0.094, -0.614}, // 26
14382 { 64.127767, 73.350, 2.620, 1.080, 0.0, -0.270, -0.289}, // 27
14383 { 64.678903, 46.350, 3.195, 1.050, 0.0, -0.366, -0.259}, // 28
14384 { 65.224071, 27.480, 3.815, 1.020, 0.0, -0.326, -0.368}, // 29
14385 { 65.764772, 15.300, 4.485, 1.000, 0.0, -0.232, -0.500}, // 30
14386 { 66.302091, 8.009, 5.225, 0.970, 0.0, -0.146, -0.609}, // 31
14387 { 66.836830, 3.946, 6.005, 0.940, 0.0, -0.147, -0.639}, // 32
14388 { 67.369598, 1.832, 6.845, 0.920, 0.0, -0.174, -0.647}, // 33
14389 { 67.900867, 0.801, 7.745, 0.890, 0.0, -0.198, -0.655}, // 34
14390 { 68.431005, 0.330, 8.695, 0.870, 0.0, -0.210, -0.660}, // 35
14391 { 68.960311, 0.128, 9.695, 0.850, 0.0, -0.220, -0.665}, // 36
14392 { 118.750343, 94.500, 0.009, 1.630, 0.0, -0.031, 0.008}, // 37
14393 { 368.498350, 6.790, 0.049, 1.920, 0.6, 0.000, 0.000}, // 38
14394 { 424.763124, 63.800, 0.044, 1.926, 0.6, 0.000, 0.000}, // 39
14395 { 487.249370, 23.500, 0.049, 1.920, 0.6, 0.000, 0.000}, // 40
14396 { 715.393150, 9.960, 0.145, 1.810, 0.6, 0.000, 0.000}, // 41
14397 { 773.839675, 67.100, 0.130, 1.810, 0.6, 0.000, 0.000}, // 42
14398 { 834.145330, 18.000, 0.147, 1.810, 0.6, 0.000, 0.000}}; // 43
14399
14400 // number of lines of Liebe O2-line catalog (0-43 lines)
14401 const Index i_first = 0;
14402 const Index i_last = 43; // all the spec. lines up to 1THz
14403 // const Index i_last = 37; // only the 60GHz complex + 118GHz line
14404
14405
14406 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14407 // standard values for the MPM92 model (JQSRT, Vol 48, pp. 629-643, 1992):
14408 const Numeric CC_MPM92 = 1.00000;
14409 const Numeric CL_MPM92 = 1.00000;
14410 const Numeric CW_MPM92 = 1.00000;
14411 const Numeric CO_MPM92 = 1.00000;
14412 int AppCutoff = 0;
14413 // ---------------------------------------------------------------------------------------
14414
14415
14416 // select the parameter set (!!model dominates values!!):
14417 Numeric CC, CL, CW, CO;
14418 if ( model == "MPM92" )
14419 {
14420 CC = CC_MPM92;
14421 CL = CL_MPM92;
14422 CW = CW_MPM92;
14423 CO = CO_MPM92;
14424 }
14425 else if ( model == "MPM92Lines" )
14426 {
14427 CC = 0.000;
14428 CL = CL_MPM92;
14429 CW = CW_MPM92;
14430 CO = CO_MPM92;
14431 }
14432 else if ( model == "MPM92Continuum" )
14433 {
14434 CC = CC_MPM92;
14435 CL = 0.000;
14436 CW = 0.000;
14437 CO = 0.000;
14438 }
14439 else if ( model == "MPM92NoCoupling" )
14440 {
14441 CC = CC_MPM92;
14442 CL = CL_MPM92;
14443 CW = CW_MPM92;
14444 CO = 0.000;
14445 }
14446 else if ( model == "MPM92NoCutoff" )
14447 {
14448 CC = CC_MPM92;
14449 CL = CL_MPM92;
14450 CW = CW_MPM92;
14451 CO = CO_MPM92;
14452 AppCutoff = 1;
14453 }
14454 else if ( model == "user" )
14455 {
14456 CC = CCin;
14457 CL = CLin;
14458 CW = CWin;
14459 CO = COin;
14460 }
14461 else
14462 {
14463 ostringstream os;
14464 os << "O2-MPM92: ERROR! Wrong model values given.\n"
14465 << "Valid models are: 'MPM92' 'MPM92Lines' 'MPM92Continuum' 'MPM92NoCoupling' 'MPM92NoCutoff'"
14466 << "and 'user'" << '\n';
14467 throw runtime_error(os.str());
14468 }
14469 out3 << "O2-MPM92: (model=" << model << ") parameter values in use:\n"
14470 << " CC = " << CC << "\n"
14471 << " CL = " << CL << "\n"
14472 << " CW = " << CW << "\n"
14473 << " CO = " << CO << "\n";
14474
14475
14476 // const = VMR * ISORATIO = 0.20946 * 0.99519
14477 // this constant is already incorporated into the line strength, so we
14478 // have top devide the line strength by this value since arts multiplies pxsec
14479 // by these variables later in abs_coefCalc.
14480 const Numeric VMRISO = 0.2085;
14481
14482 // O2 continuum parameters of MPM92:
14483 const Numeric S0 = 6.140e-5; // line strength [ppm]
14484 const Numeric G0 = 0.560e-3; // line width [GHz/hPa]
14485 const Numeric X0 = 0.800; // temperature dependence of line width [1]
14486
14487 const Index n_p = abs_p.nelem(); // Number of pressure levels
14488 const Index n_f = f_grid.nelem(); // Number of frequencies
14489
14490 // Check that dimensions of abs_p, abs_t, and vmr agree:
14491 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14491
, "n_p==abs_t.nelem()") : (void)0)
;
14492 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14492
, "n_p==vmr.nelem()") : (void)0)
;
14493
14494 // Check that dimensions of pxsec are consistent with n_f
14495 // and n_p. It should be [n_f,n_p]:
14496 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14496
, "n_f==pxsec.nrows()") : (void)0)
;
14497 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14497
, "n_p==pxsec.ncols()") : (void)0)
;
14498
14499 // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
14500 for ( Index i=0; i<n_p; ++i )
14501 {
14502 // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
14503 if (vmr[i] == 0.)
14504 {
14505 pxsec(joker, i) = 0.;
14506 continue;
14507 }
14508
14509 // check if O2-VMR will cause an underflow due to division by zero:
14510 if (vmr[i] < VMRCalcLimit)
14511 {
14512 ostringstream os;
14513 os << "ERROR: MPM92 O2 full absorption model has detected a O2 volume mixing ratio of "
14514 << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
14515 << "Therefore no calculation is performed.\n";
14516 throw runtime_error(os.str());
14517 return;
14518 }
14519
14520 // relative inverse temperature [1]
14521 Numeric theta = (300.0 / abs_t[i]);
14522 // H2O partial pressure [hPa]
14523 Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
14524 // dry air partial pressure [hPa]
14525 Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
14526 // here the total pressure is devided by the O2 vmr for the
14527 // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
14528 Numeric pda_dummy = pda;
14529 // O2 continuum strength [ppm]
14530 Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
14531 // O2 continuum pseudo line broadening [GHz]
14532 Numeric gam_cont = G0 * (pwv+pda) * pow( theta, X0 ); // GHz
14533
14534 // Loop over input frequency
14535 for ( Index s=0; s<n_f; ++s )
14536 {
14537 // input frequency in [GHz]
14538 Numeric ff = f_grid[s] * Hz_to_GHz;
14539 // O2 continuum absorption [1/m]
14540 // cross section: pxsec = absorption / var
14541 // the vmr of O2 will be multiplied at the stage of absorption calculation:
14542 Numeric Nppc = CC * strength_cont * ff * gam_cont /
14543 ( pow( ff, (Numeric)2.) + pow( gam_cont, (Numeric)2.) );
14544
14545 // Loop over MPM92 O2 spectral lines:
14546 Numeric Nppl = 0.0;
14547 for ( Index l = i_first; l <= i_last; ++l )
14548 {
14549 // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
14550 Numeric strength = CL * 1.000e-6 * pda_dummy * mpm92[l][1] / mpm92[l][0] *
14551 pow(theta, (Numeric)3.) * exp(mpm92[l][2]*(1.0-theta));
14552 // line broadening parameter [GHz]
14553 Numeric gam = CW * ( mpm92[l][3] * 0.001 *
14554 ( ( pda * pow(theta, ((Numeric)0.8-mpm92[l][4]))) +
14555 (1.10 * pwv * theta) ) );
14556 // line mixing parameter [1]
14557 // if (l < 11) CD = 1.1000;
14558 Numeric delta = CO * ( (mpm92[l][5] + mpm92[l][6] * theta) *
14559 (pda+pwv) * 0.001 * pow(theta, (Numeric)0.8) );
14560 // absorption [dB/km] like in the original MPM92
14561 Nppl += strength * MPMLineShapeO2Function(gam, mpm92[l][0], ff, delta);
14562 }
14563 // in MPM92 we adopt the cutoff for O2 line absorption if abs_l < 0
14564 // absorption cannot be less than 0 according to MPM87 and MPM93 source code.
14565 if (AppCutoff == 0)
14566 {
14567 if (Nppl < 0.000) Nppl = 0.0000;
14568 }
14569 //
14570 // O2 line absorption [1/m]
14571 // cross section: pxsec = absorption / var
14572 // the vmr of O2 will be multiplied at the stage of absorption calculation:
14573 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
14574 }
14575 }
14576 return;
14577}
14578//
14579// #################################################################################
14580//! TRE05O2AbsModel
14581/*!
14582 * \param[out] pxsec cross section (absorption/volume mixing ratio) of
14583 * O2 according to TRE05 [1/m]
14584 * \param CCin scaling factor for the O2-continuum [1]
14585 * \param CLin scaling factor for the O2-line strengths [1]
14586 * \param CWin scaling factor for the O2-line widths [1]
14587 * \param COin scaling factor for the O2-line coupling [1]
14588 * \param model allows user defined input parameter set
14589 * (CCin, CLin, CWin, and COin)<br> or choice of
14590 * pre-defined parameters of specific models (see note below).
14591 * \param f_grid predefined frequency grid [Hz]
14592 * \param abs_p predefined pressure [Pa]
14593 * \param abs_t predefined temperature grid [K]
14594 * \param abs_h2o H2O volume mixing ratio profile [1]
14595 * \param vmr O2 volume mixing ratio profile [1]
14596 *
14597 * \note Except for model 'user' the input parameters CCin, CLin, CWin, and COin
14598 * are neglected (model dominates over parameters).<br>
14599 * Allowed models: 'TRE05', 'TRE05Lines', 'TRE05Continuum', 'TRE05NoCoupling',
14600 * 'TRE05NoCutoff', and 'user'. See the user guide for detailed explanations.
14601 *
14602 * \remark References: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
14603 * <i>Propagation modeling of moist air and suspended water/ice
14604 * particles at frequencies below 1000 GHz</i>,<br>
14605 * AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14606 * Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
14607 *
14608 * M.Yu. Tretyakov, M.A. Koshelev, V.V. Dorovskikh,
14609 * D.S. Makarov, P.W. Rosenkranz; 60-GHz oxygen band: precise broadening and central frequencies
14610 * of fine-structure lines, absolute absorption profile
14611 * at atmospheric pressure, and revision of mixing coefficients
14612 * doi:10.1016/j.jms.2004.11.011
14613 *
14614 * \remark This is a copy of MPM93O2AbsModel with an exception of having new values from
14615 * the Tretyakov etal. 2005 paper.
14616 *
14617 * \author Richard Larsson
14618 * \date 2013-09-20
14619 */
14620
14621void TRE05O2AbsModel (MatrixView pxsec,
14622 const Numeric CCin, // continuum scale factor
14623 const Numeric CLin, // line strength scale factor
14624 const Numeric CWin, // line broadening scale factor
14625 const Numeric COin, // line coupling scale factor
14626 const String& model,
14627 ConstVectorView f_grid,
14628 ConstVectorView abs_p,
14629 ConstVectorView abs_t,
14630 ConstVectorView abs_h2o, // VMR 0f H2O
14631 ConstVectorView vmr, // VMR of O2
14632 const Verbosity& verbosity)
14633{
14634 CREATE_OUT3ArtsOut3 out3(verbosity);
14635
14636 //
14637 // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
14638 // 0 1 2 3 4 5 6
14639 // f0 a1 a2 a3 a4 a5 a6
14640 // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
14641 const Numeric tre05[44][7] = {
14642 { 50.474214, 0.975/10, 9.651, 0.669, 0.0, 0.2566, 0.685}, // 37-
14643 { 50.987745, 2.529/10, 8.653, 0.717, 0.0, 0.2246, 0.680}, // 35-
14644 { 51.503360, 6.193/10, 7.709, 0.764, 0.0, 0.1947, 0.6729}, // 33-
14645 { 52.021429, 14.32/10, 6.819, 0.811, 0.0, 0.1667, 0.6640}, // 31-
14646 { 52.542418, 31.24/10, 5.983, 0.858, 0.0, 0.1388, 0.6526}, // 29-
14647 { 53.066934, 64.29/10, 5.201, 0.906, 0.0, 0.1349, 0.6206}, // 27-
14648 { 53.595775, 124.6/10, 4.474, 0.955, 0.0, 0.2227, 0.5085}, // 25-
14649 { 54.130025, 227.3/10, 3.800, 0.996, 0.0, 0.3170, 0.3750}, // 23-
14650 { 54.671180, 389.7/10, 3.182, 1.037, 0.0, 0.3558, 0.2654}, // 21-
14651 { 55.221384, 627.1/10, 2.618, 1.089, 0.0, 0.2560, 0.2952}, // 19-
14652 { 55.783815, 945.3/10, 2.109, 1.134, 0.0, -0.1172, 0.6135}, // 17-
14653 { 56.264774, 543.4/10, 0.014, 1.703, 0.0, 0.3525, -0.0978}, // 1+
14654 { 56.363399, 1331.8/10, 1.654, 1.189, 0.0, -0.2378, 0.6547}, // 15-
14655 { 56.968211, 1746.6/10, 1.255, 1.223, 0.0, -0.3545, 0.6451}, // 13-
14656 { 57.612486, 2120.1/10, 0.910, 1.262, 0.0, -0.5416, 0.6056}, // 11-
14657 { 58.323877, 2363.7/10, 0.621, 1.295, 0.0, -0.1932, 0.0436}, // 9-
14658 { 58.446588, 1442.1/10, 0.083, 1.491, 0.0, 0.6768, -0.1273}, // 3+
14659 { 59.164204, 2379.9/10, 0.387, 1.353, 0.0, -0.6561, 0.2309}, // 7-
14660 { 59.590983, 2090.7/10, 0.207, 1.408, 0.0, 0.6957, -0.0776}, // 5+
14661 { 60.306056, 2103.4/10, 0.207, 1.415, 0.0, -0.6395, 0.0699}, // 5-
14662 { 60.434778, 2438.0/10, 0.386, 1.339, 0.0, 0.6342, -0.2825}, // 7+
14663 { 61.150562, 2479.5/10, 0.621, 1.292, 0.0, 0.1014, -0.0584}, // 9+
14664 { 61.800158, 2275.9/10, 0.910, 1.263, 0.0, 0.5014, -0.6619}, // 11+
14665 { 62.411220, 1915.4/10, 1.255, 1.217, 0.0, 0.3029, -0.6759}, // 13+
14666 { 62.486253, 1503.0/10, 0.083, 1.513, 0.0, -0.4499, 0.0844}, // 3-
14667 { 62.997984, 1490.2/10, 1.654, 1.174, 0.0, 0.1856, -0.6675}, // 15+
14668 { 63.568526, 1078.0/10, 2.108, 1.134, 0.0, 0.0658, -0.6139}, // 17+
14669 { 64.127775, 728.7/10, 2.617, 1.088, 0.0, -0.3036, -0.2895}, // 19+
14670 { 64.678910, 461.3/10, 3.181, 1.038, 0.0, -0.3968, -0.2590}, // 21+
14671 { 65.224078, 274.0/10, 3.800, 0.996, 0.0, -0.3528, -0.3680}, // 23+
14672 { 65.764779, 153.0/10, 4.473, 0.955, 0.0, -0.2548, -0.5002}, // 25+
14673 { 66.302096, 80.40/10, 5.200, 0.906, 0.0, -0.1660, -0.6091}, // 27+
14674 { 66.836834, 39.80/10, 5.982, 0.858, 0.0, -0.1680, -0.6393}, // 29+
14675 { 67.369601, 18.56/10, 6.818, 0.811, 0.0, -0.1956, -0.6475}, // 31+
14676 { 67.900868, 8.172/10, 7.708, 0.764, 0.0, -0.2216, -0.6545}, // 33+
14677 { 68.431006, 3.397/10, 8.652, 0.717, 0.0, -0.2492, -0.660}, // 35+
14678 { 68.960312, 1.334/10, 9.650, 0.669, 0.0, -0.2773, -0.665}, // 37+
14679 { 118.750334, 940.3/10, 0.010, 1.664, 0.0, -0.0439, 0.0079}, // 1-
14680 { 368.498246, 67.4/10, 0.048, 1.64, 0.6, 0.0, 0.0}, // QN1
14681 { 424.763020, 637.7/10, 0.044, 1.64, 0.6, 0.0, 0.0}, // QN2
14682 { 487.249273, 237.4/10, 0.049, 1.60, 0.6, 0.0, 0.0}, // QN3
14683 { 715.392902, 98.1/10, 0.145, 1.60, 0.6, 0.0, 0.0}, // QN4
14684 { 773.839490, 572.3/10, 0.141, 1.62, 0.6, 0.0, 0.0}, // QN5
14685 { 834.145546, 183.1/10, 0.145, 1.47, 0.6, 0.0, 0.0}};// QN6
14686 // number of lines of Liebe O2-line catalog (0-43 lines)
14687 const Index i_first = 0;
14688 const Index i_last = 43; // all the spec. lines up to 1THz
14689 // const Index i_last = 37; // only the 60GHz complex + 118GHz line
14690
14691
14692 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14693 // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
14694 const Numeric CC_TRE05 = 1.00000;
14695 const Numeric CL_TRE05 = 1.00000;
14696 const Numeric CW_TRE05 = 1.00000;
14697 const Numeric CO_TRE05 = 1.00000;
14698 int AppCutoff = 0;
14699 // ---------------------------------------------------------------------------------------
14700
14701
14702 // select the parameter set (!!model dominates values!!):
14703 Numeric CC, CL, CW, CO;
14704 if ( model == "TRE05" )
14705 {
14706 CC = CC_TRE05;
14707 CL = CL_TRE05;
14708 CW = CW_TRE05;
14709 CO = CO_TRE05;
14710 }
14711 else if ( model == "TRE05Lines" )
14712 {
14713 CC = 0.000;
14714 CL = CL_TRE05;
14715 CW = CW_TRE05;
14716 CO = CO_TRE05;
14717 }
14718 else if ( model == "TRE05Continuum" )
14719 {
14720 CC = CC_TRE05;
14721 CL = 0.000;
14722 CW = 0.000;
14723 CO = 0.000;
14724 }
14725 else if ( model == "TRE05NoCoupling" )
14726 {
14727 CC = CC_TRE05;
14728 CL = CL_TRE05;
14729 CW = CW_TRE05;
14730 CO = 0.000;
14731 }
14732 else if ( model == "TRE05NoCutoff" )
14733 {
14734 // !!ATTENTION!!
14735 // In the window regions the total absorption can get negative values.
14736 // So be carefull with this selection!
14737 CC = CC_TRE05;
14738 CL = CL_TRE05;
14739 CW = CW_TRE05;
14740 CO = CO_TRE05;
14741 AppCutoff = 1;
14742 }
14743 else if ( model == "user" )
14744 {
14745 CC = CCin;
14746 CL = CLin;
14747 CW = CWin;
14748 CO = COin;
14749 }
14750 else
14751 {
14752 ostringstream os;
14753 os << "O2-TRE05: ERROR! Wrong model values given.\n"
14754 << "Valid models are: 'TRE05' 'TRE05Lines' 'TRE05Continuum' 'TRE05NoCoupling' 'TRE05NoCutoff'"
14755 << "and 'user'" << '\n';
14756 throw runtime_error(os.str());
14757 }
14758 out3 << "O2-TRE05: (model=" << model << ") parameter values in use:\n"
14759 << " CC = " << CC << "\n"
14760 << " CL = " << CL << "\n"
14761 << " CW = " << CW << "\n"
14762 << " CO = " << CO << "\n";
14763
14764
14765 // const = VMR * ISORATIO = 0.20946 * 0.99519
14766 // this constant is already incorporated into the line strength, so we
14767 // have top devide the line strength by this value since arts multiplies pxsec
14768 // by these variables later in abs_coefCalc.
14769 const Numeric VMRISO = 0.2085;
14770
14771 // O2 continuum parameters of TRE05:
14772 const Numeric S0 = 6.140e-5; // line strength [ppm]
14773 const Numeric G0 = 0.560e-3; // line width [GHz/hPa]
14774 const Numeric X0 = 0.800; // temperature dependence of line width [1]
14775
14776 const Index n_p = abs_p.nelem(); // Number of pressure levels
14777 const Index n_f = f_grid.nelem(); // Number of frequencies
14778
14779 // Check that dimensions of abs_p, abs_t, and vmr agree:
14780 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14780
, "n_p==abs_t.nelem()") : (void)0)
;
14781 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14781
, "n_p==vmr.nelem()") : (void)0)
;
14782
14783 // Check that dimensions of pxsec are consistent with n_f
14784 // and n_p. It should be [n_f,n_p]:
14785 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14785
, "n_f==pxsec.nrows()") : (void)0)
;
14786 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 14786
, "n_p==pxsec.ncols()") : (void)0)
;
14787
14788 // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
14789 for ( Index i=0; i<n_p; ++i )
14790 {
14791 // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
14792 if (vmr[i] == 0.)
14793 {
14794 pxsec(joker, i) = 0.;
14795 continue;
14796 }
14797
14798 // check if O2-VMR will cause an underflow due to division by zero:
14799 if (vmr[i] < VMRCalcLimit)
14800 {
14801 ostringstream os;
14802 os << "ERROR: TRE05 O2 full absorption model has detected a O2 volume mixing ratio of "
14803 << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
14804 << "Therefore no calculation is performed.\n";
14805 throw runtime_error(os.str());
14806 return;
14807 }
14808
14809 // relative inverse temperature [1]
14810 Numeric theta = (300.0 / abs_t[i]);
14811 // H2O partial pressure [hPa]
14812 Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
14813 // dry air partial pressure [hPa]
14814 Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
14815 // here the total pressure is devided by the O2 vmr for the
14816 // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
14817 // old version without VMRISO: Numeric pda_dummy = pda / vmr[i];
14818 Numeric pda_dummy = pda;
14819 // O2 continuum strength [ppm]
14820 Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
14821 // O2 continuum pseudo line broadening [GHz]
14822 Numeric gam_cont = G0 * (pwv+pda) * pow( theta, X0 ); // GHz
14823
14824 // Loop over input frequency
14825 for ( Index s=0; s<n_f; ++s )
14826 {
14827 // input frequency in [GHz]
14828 Numeric ff = f_grid[s] * Hz_to_GHz;
14829 // O2 continuum absorption [1/m]
14830 // cross section: pxsec = absorption / var
14831 // the vmr of O2 will be multiplied at the stage of absorption calculation:
14832 Numeric Nppc = CC * strength_cont * ff * gam_cont /
14833 ( pow( ff, (Numeric)2.)
14834 + pow( gam_cont, (Numeric)2.) );
14835
14836 // Loop over TRE05 O2 spectral lines:
14837 Numeric Nppl = 0.0;
14838 for ( Index l = i_first; l <= i_last; ++l )
14839 {
14840 // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
14841 Numeric strength = CL * 1.000e-6 * pda_dummy *
14842 tre05[l][1] / tre05[l][0] *
14843 pow(theta, (Numeric)3.) * exp(tre05[l][2]*(1.0-theta));
14844 // line broadening parameter [GHz]
14845 Numeric gam = CW * ( tre05[l][3] * 0.001 *
14846 ( ( pda * pow(theta, ((Numeric)0.8-tre05[l][4]))) +
14847 (1.10 * pwv * theta) ) );
14848 // line mixing parameter [1]
14849 // if (l < 11) CD = 1.1000;
14850 Numeric delta = CO * ( (tre05[l][5] + tre05[l][6] * theta) *
14851 (pda+pwv) * pow(theta, (Numeric)0.8)
14852 * (Numeric)0.001 );
14853 // absorption [dB/km] like in the original TRE05
14854 Nppl += strength * MPMLineShapeO2Function(gam, tre05[l][0], ff, delta);
14855 }
14856 // in TRE05 there is a cutoff for O2 line absorption if abs_l < 0
14857 // absorption cannot be less than 0 according to TRE05 philosophy.
14858 if (AppCutoff == 0)
14859 {
14860 if (Nppl < 0.000) Nppl = 0.0000;// <---!!IMPORTANT FEATURE!!
14861 }
14862 //
14863 // O2 line absorption [1/m]
14864 // cross section: pxsec = absorption / var
14865 // the vmr of O2 will be multiplied at the stage of absorption calculation:
14866 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
14867 }
14868 }
14869 return;
14870 }
14871//
14872// #################################################################################
14873//! MPM93O2AbsModel
14874/*!
14875 \param[out] pxsec cross section (absorption/volume mixing ratio) of
14876 O2 according to MPM93 [1/m]
14877 \param CCin scaling factor for the O2-continuum [1]
14878 \param CLin scaling factor for the O2-line strengths [1]
14879 \param CWin scaling factor for the O2-line widths [1]
14880 \param COin scaling factor for the O2-line coupling [1]
14881 \param model allows user defined input parameter set
14882 (CCin, CLin, CWin, and COin)<br> or choice of
14883 pre-defined parameters of specific models (see note below).
14884 \param f_grid predefined frequency grid [Hz]
14885 \param abs_p predefined pressure [Pa]
14886 \param abs_t predefined temperature grid [K]
14887 \param abs_h2o H2O volume mixing ratio profile [1]
14888 \param vmr O2 volume mixing ratio profile [1]
14889
14890 \note Except for model 'user' the input parameters CCin, CLin, CWin, and COin
14891 are neglected (model dominates over parameters).<br>
14892 Allowed models: 'MPM93', 'MPM93Lines', 'MPM93Continuum', 'MPM93NoCoupling',
14893 'MPM93NoCutoff', and 'user'. See the user guide for detailed explanations.
14894
14895 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
14896 <i>Propagation modeling of moist air and suspended water/ice
14897 particles at frequencies below 1000 GHz</i>,<br>
14898 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
14899 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
14900
14901 \author Thomas Kuhn
14902 \date 2001-11-05
14903 */
14904
14905void MPM93O2AbsModel (MatrixView pxsec,
14906 const Numeric CCin, // continuum scale factor
14907 const Numeric CLin, // line strength scale factor
14908 const Numeric CWin, // line broadening scale factor
14909 const Numeric COin, // line coupling scale factor
14910 const String& model,
14911 ConstVectorView f_grid,
14912 ConstVectorView abs_p,
14913 ConstVectorView abs_t,
14914 ConstVectorView abs_h2o, // VMR 0f H2O
14915 ConstVectorView vmr, // VMR of O2
14916 const Verbosity& verbosity)
14917{
14918 CREATE_OUT3ArtsOut3 out3(verbosity);
14919
14920 //
14921 // Coefficients are from Liebe et al., AGARD CP-May93, Paper 3/1-10
14922 // 0 1 2 3 4 5 6
14923 // f0 a1 a2 a3 a4 a5 a6
14924 // [GHz] [kHz/hPa] [1] [MHz/hPa] [1] [10³/hPa]
14925 const Numeric mpm93[44][7] = {
14926 { 50.474238, 0.094, 9.694, 0.890, 0.0, 0.240, 0.790}, // 0
14927 { 50.987749, 0.246, 8.694, 0.910, 0.0, 0.220, 0.780}, // 1
14928 { 51.503350, 0.608, 7.744, 0.940, 0.0, 0.197, 0.774}, // 2
14929 { 52.021410, 1.414, 6.844, 0.970, 0.0, 0.166, 0.764}, // 3
14930 { 52.542394, 3.102, 6.004, 0.990, 0.0, 0.136, 0.751}, // 4
14931 { 53.066907, 6.410, 5.224, 1.020, 0.0, 0.131, 0.714}, // 5
14932 { 53.595749, 12.470, 4.484, 1.050, 0.0, 0.230, 0.584}, // 6
14933 { 54.130000, 22.800, 3.814, 1.070, 0.0, 0.335, 0.431}, // 7
14934 { 54.671159, 39.180, 3.194, 1.100, 0.0, 0.374, 0.305}, // 8
14935 { 55.221367, 63.160, 2.624, 1.130, 0.0, 0.258, 0.339}, // 9
14936 { 55.783802, 95.350, 2.119, 1.170, 0.0, -0.166, 0.705}, // 10
14937 { 56.264775, 54.890, 0.015, 1.730, 0.0, 0.390, -0.113}, // 11
14938 { 56.363389, 134.400, 1.660, 1.200, 0.0, -0.297, 0.753}, // 12
14939 { 56.968206, 176.300, 1.260, 1.240, 0.0, -0.416, 0.742}, // 13
14940 { 57.612484, 214.100, 0.915, 1.280, 0.0, -0.613, 0.697}, // 14
14941 { 58.323877, 238.600, 0.626, 1.330, 0.0, -0.205, 0.051}, // 15
14942 { 58.446590, 145.700, 0.084, 1.520, 0.0, 0.748, -0.146}, // 16
14943 { 59.164207, 240.400, 0.391, 1.390, 0.0, -0.722, 0.266}, // 17
14944 { 59.590983, 211.200, 0.212, 1.430, 0.0, 0.765, -0.090}, // 18
14945 { 60.306061, 212.400, 0.212, 1.450, 0.0, -0.705, 0.081}, // 19
14946 { 60.434776, 246.100, 0.391, 1.360, 0.0, 0.697, -0.324}, // 20
14947 { 61.150560, 250.400, 0.626, 1.310, 0.0, 0.104, -0.067}, // 21
14948 { 61.800154, 229.800, 0.915, 1.270, 0.0, 0.570, -0.761}, // 22
14949 { 62.411215, 193.300, 1.260, 1.230, 0.0, 0.360, -0.777}, // 23
14950 { 62.486260, 151.700, 0.083, 1.540, 0.0, -0.498, 0.097}, // 24
14951 { 62.997977, 150.300, 1.665, 1.200, 0.0, 0.239, -0.768}, // 25
14952 { 63.568518, 108.700, 2.115, 1.170, 0.0, 0.108, -0.706}, // 26
14953 { 64.127767, 73.350, 2.620, 1.130, 0.0, -0.311, -0.332}, // 27
14954 { 64.678903, 46.350, 3.195, 1.100, 0.0, -0.421, -0.298}, // 28
14955 { 65.224071, 27.480, 3.815, 1.070, 0.0, -0.375, -0.423}, // 29
14956 { 65.764772, 15.300, 4.485, 1.050, 0.0, -0.267, -0.575}, // 30
14957 { 66.302091, 8.009, 5.225, 1.020, 0.0, -0.168, -0.700}, // 31
14958 { 66.836830, 3.946, 6.005, 0.990, 0.0, -0.169, -0.735}, // 32
14959 { 67.369598, 1.832, 6.845, 0.970, 0.0, -0.200, -0.744}, // 33
14960 { 67.900867, 0.801, 7.745, 0.940, 0.0, -0.228, -0.753}, // 34
14961 { 68.431005, 0.330, 8.695, 0.920, 0.0, -0.240, -0.760}, // 35
14962 { 68.960311, 0.128, 9.695, 0.900, 0.0, -0.250, -0.765}, // 36
14963 { 118.750343, 94.500, 0.009, 1.630, 0.0, -0.036, 0.009}, // 37
14964 { 368.498350, 6.790, 0.049, 1.920, 0.6, 0.000, 0.000}, // 38
14965 { 424.763124, 63.800, 0.044, 1.930, 0.6, 0.000, 0.000}, // 39
14966 { 487.249370, 23.500, 0.049, 1.920, 0.6, 0.000, 0.000}, // 40
14967 { 715.393150, 9.960, 0.145, 1.810, 0.6, 0.000, 0.000}, // 41
14968 { 773.839675, 67.100, 0.130, 1.820, 0.6, 0.000, 0.000}, // 42
14969 { 834.145330, 18.000, 0.147, 1.810 , 0.6, 0.000, 0.000}}; // 43
14970 // number of lines of Liebe O2-line catalog (0-43 lines)
14971 const Index i_first = 0;
14972 const Index i_last = 43; // all the spec. lines up to 1THz
14973 // const Index i_last = 37; // only the 60GHz complex + 118GHz line
14974
14975
14976 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
14977 // standard values for the MPM87 model (Radio Science, 20(5), 1985, 1069):
14978 const Numeric CC_MPM93 = 1.00000;
14979 const Numeric CL_MPM93 = 1.00000;
14980 const Numeric CW_MPM93 = 1.00000;
14981 const Numeric CO_MPM93 = 1.00000;
14982 int AppCutoff = 0;
14983 // ---------------------------------------------------------------------------------------
14984
14985
14986 // select the parameter set (!!model dominates values!!):
14987 Numeric CC, CL, CW, CO;
14988 if ( model == "MPM93" )
14989 {
14990 CC = CC_MPM93;
14991 CL = CL_MPM93;
14992 CW = CW_MPM93;
14993 CO = CO_MPM93;
14994 }
14995 else if ( model == "MPM93Lines" )
14996 {
14997 CC = 0.000;
14998 CL = CL_MPM93;
14999 CW = CW_MPM93;
15000 CO = CO_MPM93;
15001 }
15002 else if ( model == "MPM93Continuum" )
15003 {
15004 CC = CC_MPM93;
15005 CL = 0.000;
15006 CW = 0.000;
15007 CO = 0.000;
15008 }
15009 else if ( model == "MPM93NoCoupling" )
15010 {
15011 CC = CC_MPM93;
15012 CL = CL_MPM93;
15013 CW = CW_MPM93;
15014 CO = 0.000;
15015 }
15016 else if ( model == "MPM93NoCutoff" )
15017 {
15018 // !!ATTENTION!!
15019 // In the window regions the total absorption can get negative values.
15020 // So be carefull with this selection!
15021 CC = CC_MPM93;
15022 CL = CL_MPM93;
15023 CW = CW_MPM93;
15024 CO = CO_MPM93;
15025 AppCutoff = 1;
15026 }
15027 else if ( model == "user" )
15028 {
15029 CC = CCin;
15030 CL = CLin;
15031 CW = CWin;
15032 CO = COin;
15033 }
15034 else
15035 {
15036 ostringstream os;
15037 os << "O2-MPM93: ERROR! Wrong model values given.\n"
15038 << "Valid models are: 'MPM93' 'MPM93Lines' 'MPM93Continuum' 'MPM93NoCoupling' 'MPM93NoCutoff'"
15039 << "and 'user'" << '\n';
15040 throw runtime_error(os.str());
15041 }
15042 out3 << "O2-MPM93: (model=" << model << ") parameter values in use:\n"
15043 << " CC = " << CC << "\n"
15044 << " CL = " << CL << "\n"
15045 << " CW = " << CW << "\n"
15046 << " CO = " << CO << "\n";
15047
15048
15049 // const = VMR * ISORATIO = 0.20946 * 0.99519
15050 // this constant is already incorporated into the line strength, so we
15051 // have top devide the line strength by this value since arts multiplies pxsec
15052 // by these variables later in abs_coefCalc.
15053 const Numeric VMRISO = 0.2085;
15054
15055 // O2 continuum parameters of MPM93:
15056 const Numeric S0 = 6.140e-5; // line strength [ppm]
15057 const Numeric G0 = 0.560e-3; // line width [GHz/hPa]
15058 const Numeric X0 = 0.800; // temperature dependence of line width [1]
15059
15060 const Index n_p = abs_p.nelem(); // Number of pressure levels
15061 const Index n_f = f_grid.nelem(); // Number of frequencies
15062
15063 // Check that dimensions of abs_p, abs_t, and vmr agree:
15064 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15064
, "n_p==abs_t.nelem()") : (void)0)
;
15065 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15065
, "n_p==vmr.nelem()") : (void)0)
;
15066
15067 // Check that dimensions of pxsec are consistent with n_f
15068 // and n_p. It should be [n_f,n_p]:
15069 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15069
, "n_f==pxsec.nrows()") : (void)0)
;
15070 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15070
, "n_p==pxsec.ncols()") : (void)0)
;
15071
15072 // Loop pressure/temperature (pressure in hPa therefore the factor 0.01)
15073 for ( Index i=0; i<n_p; ++i )
15074 {
15075 // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
15076 if (vmr[i] == 0.)
15077 {
15078 pxsec(joker, i) = 0.;
15079 continue;
15080 }
15081
15082 // check if O2-VMR will cause an underflow due to division by zero:
15083 if (vmr[i] < VMRCalcLimit)
15084 {
15085 ostringstream os;
15086 os << "ERROR: MPM93 O2 full absorption model has detected a O2 volume mixing ratio of "
15087 << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
15088 << "Therefore no calculation is performed.\n";
15089 throw runtime_error(os.str());
15090 return;
15091 }
15092
15093 // relative inverse temperature [1]
15094 Numeric theta = (300.0 / abs_t[i]);
15095 // H2O partial pressure [hPa]
15096 Numeric pwv = Pa_to_hPa * abs_p[i] * abs_h2o[i];
15097 // dry air partial pressure [hPa]
15098 Numeric pda = (Pa_to_hPa * abs_p[i]) - pwv;
15099 // here the total pressure is devided by the O2 vmr for the
15100 // P_dry calculation because we calculate pxsec and not abs: abs = vmr * pxsec
15101 // old version without VMRISO: Numeric pda_dummy = pda / vmr[i];
15102 Numeric pda_dummy = pda;
15103 // O2 continuum strength [ppm]
15104 Numeric strength_cont = S0 * pda_dummy * pow( theta, (Numeric)2. );
15105 // O2 continuum pseudo line broadening [GHz]
15106 Numeric gam_cont = G0 * (pwv+pda) * pow( theta, X0 ); // GHz
15107
15108 // Loop over input frequency
15109 for ( Index s=0; s<n_f; ++s )
15110 {
15111 // input frequency in [GHz]
15112 Numeric ff = f_grid[s] * Hz_to_GHz;
15113 // O2 continuum absorption [1/m]
15114 // cross section: pxsec = absorption / var
15115 // the vmr of O2 will be multiplied at the stage of absorption calculation:
15116 Numeric Nppc = CC * strength_cont * ff * gam_cont /
15117 ( pow( ff, (Numeric)2.)
15118 + pow( gam_cont, (Numeric)2.) );
15119
15120 // Loop over MPM93 O2 spectral lines:
15121 Numeric Nppl = 0.0;
15122 for ( Index l = i_first; l <= i_last; ++l )
15123 {
15124 // line strength [ppm] S=A(1,I)*P*V**3*EXP(A(2,I)*(1.-V))*1.E-6
15125 Numeric strength = CL * 1.000e-6 * pda_dummy *
15126 mpm93[l][1] / mpm93[l][0] *
15127 pow(theta, (Numeric)3.) * exp(mpm93[l][2]*(1.0-theta));
15128 // line broadening parameter [GHz]
15129 Numeric gam = CW * ( mpm93[l][3] * 0.001 *
15130 ( ( pda * pow(theta, ((Numeric)0.8-mpm93[l][4]))) +
15131 (1.10 * pwv * theta) ) );
15132 // line mixing parameter [1]
15133 // if (l < 11) CD = 1.1000;
15134 Numeric delta = CO * ( (mpm93[l][5] + mpm93[l][6] * theta) *
15135 (pda+pwv) * pow(theta, (Numeric)0.8)
15136 * (Numeric)0.001 );
15137 // absorption [dB/km] like in the original MPM93
15138 Nppl += strength * MPMLineShapeO2Function(gam, mpm93[l][0], ff, delta);
15139 }
15140 // in MPM93 there is a cutoff for O2 line absorption if abs_l < 0
15141 // absorption cannot be less than 0 according to MPM93 philosophy.
15142 if (AppCutoff == 0)
15143 {
15144 if (Nppl < 0.000) Nppl = 0.0000;// <---!!IMPORTANT FEATURE!!
15145 }
15146 //
15147 // O2 line absorption [1/m]
15148 // cross section: pxsec = absorption / var
15149 // the vmr of O2 will be multiplied at the stage of absorption calculation:
15150 pxsec(s,i) += dB_km_to_1_m * 0.1820 * ff * (Nppl+Nppc) / VMRISO;
15151 }
15152 }
15153 return;
15154}
15155//
15156// #################################################################################
15157//
15158//! Oxygen complex at 60 GHz plus mm O2 lines plus O2 continuum
15159/*!
15160 REFERENCES FOR EQUATIONS AND COEFFICIENTS:
15161 P.W. Rosenkranz, CHAP. 2 and appendix, in ATMOSPHERIC REMOTE SENSING
15162 BY MICROWAVE RADIOMETRY (M.A. Janssen, ed., 1993).
15163 H.J. Liebe et al, JQSRT V.48, PP.629-643 (1992).
15164 M.J. Schwartz, Ph.D. thesis, M.I.T. (1997).
15165 SUBMILLIMETER LINE INTENSITIES FROM HITRAN96.
15166 This version differs from Liebe's MPM92 in two significant respects:
15167 1. It uses the modification of the 1- line width temperature dependence
15168 recommended by Schwartz: (1/T).
15169 2. It uses the same temperature dependence (X) for submillimeter
15170 line widths as in the 60 GHz band: (1/T)**0.8
15171
15172 history:
15173 05-01-95 P. Rosenkranz
15174 11-05-97 P. Rosenkranz - 1- line modification.
15175 12-16-98 pwr - updated submm freq's and intensities from HITRAN96
15176
15177 \param[out] pxsec cross section (absorption/volume mixing ratio) of
15178 O2 according to the P. W. Rosenkranz, 1993 [1/m]
15179 \param CCin O2-continuum scale factor [1]
15180 \param CLin O2 line strength scale factor [1]
15181 \param CWin O2 line broadening scale factor [1]
15182 \param COin O2 line coupling scale factor [1]
15183 \param model allows user defined input parameter set
15184 (CCin, CLin, CWin, and COin)<br> or choice of
15185 pre-defined parameters of specific models (see note below).
15186 \param version determines model version: 1988, 1993, 1998
15187 \param f_grid predefined frequency grid [Hz]
15188 \param abs_p predefined pressure [Pa]
15189 \param abs_t predefined temperature grid [K]
15190 \param vmrh2o H2O volume mixing ratio profile [1]
15191 \param vmr O2 volume mixing ratio profile [1]
15192
15193 \note Except for model 'user' the input parameters CCin, CLin, CWin, and COin
15194 are neglected (model dominates over parameters).<br>
15195 Allowed models:<br>
15196 'Rosenkranz', 'RosenkranzLines', 'RosenkranzContinuum',
15197 'RosenkranzNoCoupling', and 'user'. <br>
15198 For the parameter version the following three string values are allowed:
15199 'PWR88', 'PWR93', 'PWR98'.<br>
15200 See the user guide for detailed explanations.
15201
15202 \remark Reference: P. W. Rosenkranz, Chapter 2, in M. A. Janssen, <br>
15203 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
15204 John Wiley & Sons, Inc., 1993.
15205
15206 \author Thomas Kuhn
15207 \date 2001-11-05
15208 */
15209
15210void PWR93O2AbsModel (MatrixView pxsec,
15211 const Numeric CCin, // model parameter
15212 const Numeric CLin, // model parameter
15213 const Numeric CWin, // model parameter
15214 const Numeric COin, // model parameter
15215 const String& model, // model selection string
15216 const String& version, // PWR98, PWR93 or PWR88
15217 ConstVectorView f_grid,
15218 ConstVectorView abs_p,
15219 ConstVectorView abs_t,
15220 ConstVectorView vmrh2o,
15221 ConstVectorView vmr,
15222 const Verbosity& verbosity)
15223{
15224 CREATE_OUT3ArtsOut3 out3(verbosity);
15225
15226 const Index n_lines = 40; // all O2 lines in this model (range: 50-850 GHz)
15227 //
15228 // lines are arranged 1-,1+,3-,3+,etc. in spin-rotation spectrum
15229 // line center frequency in [GHz]
15230 const Numeric F93[n_lines] = { 118.7503, 56.2648, 62.4863, 58.4466, // 00-03
15231 60.3061, 59.5910, 59.1642, 60.4348, // 04-07
15232 58.3239, 61.1506, 57.6125, 61.8002, // 08-11
15233 56.9682, 62.4112, 56.3634, 62.9980, // 12-15
15234 55.7838, 63.5685, 55.2214, 64.1278, // 16-19
15235 54.6712, 64.6789, 54.1300, 65.2241, // 20-23
15236 53.5957, 65.7648, 53.0669, 66.3021, // 24-27
15237 52.5424, 66.8368, 52.0214, 67.3696, // 28-31
15238 51.5034, 67.9009, 368.4984, 424.7631, // 32-35
15239 487.2494, 715.3932, 773.8397, 834.1453}; // 36-39
15240
15241 // intensities in the submm range are updated according to HITRAN96
15242 const Numeric F98[n_lines] = { 118.7503, 56.2648, 62.4863, 58.4466, 60.3061, 59.5910,
15243 59.1642, 60.4348, 58.3239, 61.1506, 57.6125, 61.8002,
15244 56.9682, 62.4112, 56.3634, 62.9980, 55.7838, 63.5685,
15245 55.2214, 64.1278, 54.6712, 64.6789, 54.1300, 65.2241,
15246 53.5957, 65.7648, 53.0669, 66.3021, 52.5424, 66.8368,
15247 52.0214, 67.3696, 51.5034, 67.9009, 368.4984, 424.7632,
15248 487.2494, 715.3931, 773.8397, 834.1458};
15249
15250
15251 // line strength at T=300K in [cm² * Hz]
15252 const Numeric S93[n_lines] = { 0.2936E-14, 0.8079E-15, 0.2480E-14, 0.2228E-14,
15253 0.3351E-14, 0.3292E-14, 0.3721E-14, 0.3891E-14,
15254 0.3640E-14, 0.4005E-14, 0.3227E-14, 0.3715E-14,
15255 0.2627E-14, 0.3156E-14, 0.1982E-14, 0.2477E-14,
15256 0.1391E-14, 0.1808E-14, 0.9124E-15, 0.1230E-14,
15257 0.5603E-15, 0.7842E-15, 0.3228E-15, 0.4689E-15,
15258 0.1748E-15, 0.2632E-15, 0.8898E-16, 0.1389E-15,
15259 0.4264E-16, 0.6899E-16, 0.1924E-16, 0.3229E-16,
15260 0.8191E-17, 0.1423E-16, 0.6460E-15, 0.7047E-14,
15261 0.3011E-14, 0.1826E-14, 0.1152E-13, 0.3971E-14};
15262
15263 // intensities in the submm range are updated according to HITRAN96
15264 const Numeric S98[n_lines] = { 0.2936E-14, 0.8079E-15, 0.2480E-14, 0.2228E-14,
15265 0.3351E-14, 0.3292E-14, 0.3721E-14, 0.3891E-14,
15266 0.3640E-14, 0.4005E-14, 0.3227E-14, 0.3715E-14,
15267 0.2627E-14, 0.3156E-14, 0.1982E-14, 0.2477E-14,
15268 0.1391E-14, 0.1808E-14, 0.9124E-15, 0.1230E-14,
15269 0.5603E-15, 0.7842E-15, 0.3228E-15, 0.4689E-15,
15270 0.1748E-15, 0.2632E-15, 0.8898E-16, 0.1389E-15,
15271 0.4264E-16, 0.6899E-16, 0.1924E-16, 0.3229E-16,
15272 0.8191E-17, 0.1423E-16, 0.6494E-15, 0.7083E-14,
15273 0.3025E-14, 0.1835E-14, 0.1158E-13, 0.3993E-14};
15274
15275 // temperature exponent of the line strength in [1]
15276 const Numeric BE[n_lines] = { 0.009, 0.015, 0.083, 0.084,
15277 0.212, 0.212, 0.391, 0.391,
15278 0.626, 0.626, 0.915, 0.915,
15279 1.260, 1.260, 1.660, 1.665,
15280 2.119, 2.115, 2.624, 2.625,
15281 3.194, 3.194, 3.814, 3.814,
15282 4.484, 4.484, 5.224, 5.224,
15283 6.004, 6.004, 6.844, 6.844,
15284 7.744, 7.744, 0.048, 0.044,
15285 0.049, 0.145, 0.141, 0.145};
15286
15287 // widths in MHz/mbar for the O2 continuum
15288 const Numeric WB300 = 0.56; // [MHz/mbar]=[MHz/hPa]
15289 const Numeric X = 0.80; // [1]
15290
15291 // line width parameter [GHz/bar]
15292 const Numeric W300[n_lines] = { 1.630, 1.646, 1.468, 1.449,
15293 1.382, 1.360, 1.319, 1.297,
15294 1.266, 1.248, 1.221, 1.207,
15295 1.181, 1.171, 1.144, 1.139,
15296 1.110, 1.108, 1.079, 1.078,
15297 1.050, 1.050, 1.020, 1.020,
15298 1.000, 1.000, 0.970, 0.970,
15299 0.940, 0.940, 0.920, 0.920,
15300 0.890, 0.890, 1.920, 1.920,
15301 1.920, 1.810, 1.810, 1.810};
15302
15303 // y parameter for the calculation of Y [1/bar]
15304 const Numeric Y93[n_lines] = { -0.0233, 0.2408, -0.3486, 0.5227,
15305 -0.5430, 0.5877, -0.3970, 0.3237,
15306 -0.1348, 0.0311, 0.0725, -0.1663,
15307 0.2832, -0.3629, 0.3970, -0.4599,
15308 0.4695, -0.5199, 0.5187, -0.5597,
15309 0.5903, -0.6246, 0.6656, -0.6942,
15310 0.7086, -0.7325, 0.7348, -0.7546,
15311 0.7702, -0.7864, 0.8083, -0.8210,
15312 0.8439, -0.8529, 0.0000, 0.0000,
15313 0.0000, 0.0000, 0.0000, 0.0000};
15314
15315 // y parameter for the calculation of Y [1/bar].
15316 // These values are from P. W. Rosenkranz, Interference coefficients for the
15317 // overlapping oxygen lines in air, JQSRT, 1988, Volume 39, 287-297.
15318 const Numeric Y88[n_lines] = { -0.0244, 0.2772, -0.4068, 0.6270,
15319 -0.6183, 0.6766, -0.4119, 0.3290,
15320 0.0317, -0.1591, 0.1145, -0.2068,
15321 0.3398, -0.4158, 0.3922, -0.4482,
15322 0.4011, -0.4442, 0.4339, -0.4687,
15323 0.4783, -0.5074, 0.5157, -0.5403,
15324 0.5400, -0.5610, 0.5719, -0.5896,
15325 0.6046, -0.6194, 0.6347, -0.6468,
15326 0.6627, -0.6718, 0.0000, 0.0000,
15327 0.0000, 0.0000, 0.0000, 0.0000};
15328
15329 // v parameter for the calculation of Y [1/bar]
15330 const Numeric V[n_lines] ={ 0.0079, -0.0978, 0.0844, -0.1273,
15331 0.0699, -0.0776, 0.2309, -0.2825,
15332 0.0436, -0.0584, 0.6056, -0.6619,
15333 0.6451, -0.6759, 0.6547, -0.6675,
15334 0.6135, -0.6139, 0.2952, -0.2895,
15335 0.2654, -0.2590, 0.3750, -0.3680,
15336 0.5085, -0.5002, 0.6206, -0.6091,
15337 0.6526, -0.6393, 0.6640, -0.6475,
15338 0.6729, -0.6545, 0.0000, 0.0000,
15339 0.0000, 0.0000, 0.0000, 0.0000};
15340 // range of lines to take into account for the line absorption part
15341 const Index first_line = 0; // first line for calculation
15342 const Index last_line = 39; // last line for calculation
15343
15344 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15345 // standard values for the Rosenkranz model
15346 // (P. W. Rosenkranz, Chapter 2, pp 74, in M. A. Janssen,
15347 // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993):
15348 const Numeric CC_PWR93 = 1.00000;
15349 const Numeric CL_PWR93 = 1.00000;
15350 const Numeric CW_PWR93 = 1.00000;
15351 const Numeric CO_PWR93 = 1.00000;
15352 // ---------------------------------------------------------------------------------------
15353
15354
15355 // select the parameter set (!!model dominates values!!):
15356 Numeric CC, CL, CW, CO, Y300[n_lines], S300[n_lines], F[n_lines];
15357 // FIXME int oldnewflag = 0;
15358
15359 if ( model == "Rosenkranz" )
15360 {
15361 CC = CC_PWR93;
15362 CL = CL_PWR93;
15363 CW = CW_PWR93;
15364 CO = CO_PWR93;
15365 }
15366 else if ( model == "RosenkranzLines" )
15367 {
15368 CC = 0.000;
15369 CL = CL_PWR93;
15370 CW = CW_PWR93;
15371 CO = CO_PWR93;
15372 }
15373 else if ( model == "RosenkranzContinuum" )
15374 {
15375 CC = CC_PWR93;
15376 CL = 0.000;
15377 CW = 0.000;
15378 CO = 0.000;
15379 }
15380 else if ( model == "RosenkranzNoCoupling" )
15381 {
15382 CC = CC_PWR93;
15383 CL = CL_PWR93;
15384 CW = CW_PWR93;
15385 CO = 0.000;
15386 }
15387 else if ( model == "user" )
15388 {
15389 CC = CCin;
15390 CL = CLin;
15391 CW = CWin;
15392 CO = COin;
15393 }
15394 else
15395 {
15396 ostringstream os;
15397 os << "O2-PWR93: ERROR! Wrong model values given.\n"
15398 << "Valid models are: 'Rosenkranz', 'RosenkranzLines', RosenkranzContinuum, "
15399 << "'RosenkranzNoCoupling', and 'user'" << '\n';
15400 throw runtime_error(os.str());
15401 }
15402 out3 << "O2-PWR93: (model=" << model << ") parameter values in use:\n"
15403 << " CC = " << CC << "\n"
15404 << " CL = " << CL << "\n"
15405 << " CW = " << CW << "\n"
15406 << " CO = " << CO << "\n";
15407
15408
15409 // select version dependent parameters
15410 if ( version == "PWR88" ) {
15411 for ( Index i=0; i<n_lines; ++i )
15412 {
15413 F[i] = F93[i];
15414 S300[i] = S93[i];
15415 Y300[i] = Y88[i];
15416 };
15417 }
15418 else if ( version == "PWR93" ) {
15419 for ( Index i=0; i<n_lines; ++i )
15420 {
15421 F[i] = F93[i];
15422 S300[i] = S93[i];
15423 Y300[i] = Y93[i];
15424 };
15425 }
15426 else if ( version == "PWR98" ) {
15427 for ( Index i=0; i<n_lines; ++i )
15428 {
15429 F[i] = F98[i];
15430 S300[i] = S98[i];
15431 Y300[i] = Y93[i];
15432 };
15433 }
15434 else
15435 {
15436 ostringstream os;
15437 os << "O2-PWR93/PWR88: ERROR! Wrong version is selected.\n"
15438 << "Valid versions are:\n"
15439 << " 'PWR98' updates of F and S to HISTRAN96 and M.J.Schwartz, MIT, 1997\n"
15440 << " suggestions implemented.\n"
15441 << " 'PWR93' for the oxygen absorption model described in \n"
15442 << " P. W. Rosenkranz, Chapter 2, in M. A. Janssen,\n"
15443 << " Atmospheric Remote Sensing by Microwave Radiometry,\n"
15444 << " John Wiley & Sons, Inc., 1993.\n"
15445 << " 'PWR88' for the oxygen absorption model described in \n"
15446 << " P. W. Rosenkranz, Interference coefficients for the \n"
15447 << " overlapping oxygen lines in air, \n"
15448 << " JQSRT, 1988, Volume 39, 287-297.\n";
15449 throw runtime_error(os.str());
15450 }
15451
15452
15453 const Index n_p = abs_p.nelem(); // Number of pressure levels
15454 const Index n_f = f_grid.nelem(); // Number of frequencies
15455
15456 // Check that dimensions of abs_p, abs_t, and vmr agree:
15457 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15457
, "n_p==abs_t.nelem()") : (void)0)
;
15458 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15458
, "n_p==vmr.nelem()") : (void)0)
;
15459
15460 // Check that dimensions of pxsec are consistent with n_f
15461 // and n_p. It should be [n_f,n_p]:
15462 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15462
, "n_f==pxsec.nrows()") : (void)0)
;
15463 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15463
, "n_p==pxsec.ncols()") : (void)0)
;
15464
15465 String fail_msg;
15466 bool failed = false;
15467
15468 // Loop pressure/temperature:
15469#pragma omp parallel for \
15470 if (!arts_omp_in_parallel() \
15471 && n_p >= arts_omp_get_max_threads())
15472 for ( Index i=0; i<n_p; ++i )
15473 {
15474 // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
15475 if (vmr[i] == 0.)
15476 {
15477 pxsec(joker, i) = 0.;
15478 continue;
15479 }
15480
15481 // check if O2-VMR will cause an underflow due to division by zero:
15482 if (vmr[i] < VMRCalcLimit)
15483 {
15484 ostringstream os;
15485 os << "ERROR: PWR93 O2 full absorption model has detected a O2 volume mixing ratio of "
15486 << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
15487 << "Therefore no calculation is performed.\n";
15488#pragma omp critical (PWR93O2AbsModel_error)
15489 {
15490 fail_msg = os.str();
15491 failed = true;
15492 }
15493 continue;
15494 }
15495 // relative inverse temperature [1]
15496 Numeric TH = 3.0000e2 / abs_t[i];
15497 Numeric TH1 = (TH-1.000e0);
15498 Numeric B = pow(TH, X);
15499 // partial pressure of H2O and dry air [hPa]
15500 Numeric PRESWV = Pa_to_hPa * (abs_p[i] * vmrh2o[i]);
15501 Numeric PRESDA = Pa_to_hPa * (abs_p[i] * (1.000e0 - vmrh2o[i]));
15502 Numeric DEN = 0.001*(PRESDA*B + 1.1*PRESWV*TH); // [hPa]
15503 Numeric DENS = 0.001*(PRESDA + 1.1*PRESWV)*TH; // [hPa]
15504 Numeric DFNR = WB300*DEN; // [GHz]
15505
15506 // continuum absorption [1/m/GHz]
15507 Numeric CCONT = CC * 1.23e-10 * pow( TH, (Numeric)2. ) * abs_p[i];
15508
15509 // Loop over input frequency
15510 for ( Index s=0; s<n_f; ++s )
15511 {
15512 // initial O2 line absorption at position ff
15513 // Numeric O2ABS = 0.000e0;cd safff
15514
15515 // input frequency in [GHz]
15516 Numeric ff = Hz_to_GHz * f_grid[s];
15517
15518 // continuum absorption [Neper/km]
15519 Numeric CONT = CCONT * (ff * ff * DFNR / (ff*ff + DFNR*DFNR));
15520
15521 // Loop over Rosnekranz '93 spectral line frequency:
15522 Numeric SUM = 0.000e0;
15523 for ( Index l=first_line; l<=last_line; ++l )
15524 {
15525 Numeric DF = CW * W300[l] * DEN; // [hPa]
15526 // 118 line update according to M. J. Schwartz, MIT, 1997
15527 if ( (version == "PWR98") && (fabs((F[l]-118.75)) < 0.10) )
15528 {
15529 DF = CW * W300[l] * DENS; // [hPa]
15530 }
15531 Numeric Y = CO * 0.001 * 0.01 * abs_p[i] * B * ( Y300[l] + V[l]*TH1 );
15532 Numeric STR = CL * S300[l] * exp(-BE[l] * TH1);
15533 Numeric SF1 = ( DF + (ff-F[l])*Y ) / ( (ff-F[l])*(ff-F[l]) + DF*DF );
15534 Numeric SF2 = ( DF - (ff+F[l])*Y ) / ( (ff+F[l])*(ff+F[l]) + DF*DF );
15535 SUM += STR * (SF1+SF2) * (ff/F[l]) * (ff/F[l]);
15536 }
15537 // O2 absorption [Neper/km]
15538 // Rosenkranz uses the factor 0.5034e12 in the calculation of the abs coeff.
15539 // This factor is the product of several terms:
15540 // 0.5034e12 = ISORATIO * VMR * (Hz/GHz) * (k_B*300K)^-1
15541 // = 0.995262 * 0.20946 * 10^-9 * 2.414322e21(hPa*cm^2*km)^-1
15542 // |---- 0.2085 ----| |---- 2.414322e12(hPa*cm^2*km)^-1 ---|
15543 // |---- 0.2085 ----| |---- 2.414322e10( Pa*cm^2*km)^-1 ---|
15544 // O2ABS = 2.4143e12 * SUM * PRESDA * pow(TH, 3.0) / PI;
15545 // O2ABS = CONT + (2.414322e10 * SUM * abs_p[i] * pow(TH, 3.0) / PI);
15546 // unit conversion x Nepers/km = y 1/m ---> y = x * 1.000e-3
15547 // therefore 2.414322e10 --> 2.414322e7
15548 // pxsec [1/m]
15549 pxsec(s,i) += CONT + (2.414322e7 * SUM * abs_p[i] * pow(TH, (Numeric)3.) / PI);
15550 }
15551 }
15552
15553 if (failed) throw runtime_error(fail_msg);
15554
15555 return;
15556}
15557//
15558// #################################################################################
15559//
15560//! MPM93 O2 continuum:
15561/*!
15562 see publication side of National Telecommunications and Information Administration
15563 http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
15564 and ftp side for downloading the MPM93 original source code:
15565 ftp://ftp.its.bldrdoc.gov/pub/mpm93/
15566
15567 \param[out] pxsec cross section (absorption/volume mixing ratio) of
15568 O2-continuum according to MPM93 [1/m]
15569 \param S0in O2-continuum strength [1/Pa]
15570 \param G0in O2-continuum width [Hz/Pa]
15571 \param XS0in O2-continuum strength temperature exponent [1]
15572 \param XG0in O2-continuum width temperature exponent [1]
15573 \param model allows user defined input parameter set
15574 (S0in, G0in, xS0in, and xG0in)<br> or choice of
15575 pre-defined parameters of specific models (see note below).
15576 \param f_grid predefined frequency grid [Hz]
15577 \param abs_p predefined pressure grid [Pa]
15578 \param abs_t predefined temperature grid [K]
15579 \param abs_h2o H2O volume mixing ratio profile [1]
15580 \param vmr O2 volume mixing ratio profile [1]
15581
15582 \note Except for model 'user' the input parameters S0in, G0in, xS0in, and xG0in
15583 are neglected (model dominates over parameters).<br>
15584 Allowed models: 'MPM93' and 'user'.
15585 See the user guide for detailed explanations.
15586
15587 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
15588 <i>Propagation modeling of moist air and suspended water/ice
15589 particles at frequencies below 1000 GHz</i>,<br>
15590 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
15591 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
15592
15593 \author Thomas Kuhn
15594 \date 2001-11-05
15595 */
15596
15597void MPM93_O2_continuum (MatrixView pxsec,
15598 const Numeric S0in, // model parameter
15599 const Numeric G0in, // model parameter
15600 const Numeric XS0in, // model parameter
15601 const Numeric XG0in, // model parameter
15602 const String& model,
15603 ConstVectorView f_grid,
15604 ConstVectorView abs_p,
15605 ConstVectorView abs_t,
15606 ConstVectorView abs_h2o,
15607 ConstVectorView vmr,
15608 const Verbosity& verbosity)
15609{
15610 CREATE_OUT3ArtsOut3 out3(verbosity);
15611
15612 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15613 // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
15614 // "Propagation modeling of moist air and suspended water/ice
15615 // particles at frequencies below 1000 GHz",
15616 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
15617 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
15618 // const Numeric S0_MPM93 = 6.140e-13/0.20946; // line strength/VMR-O2 [1/Pa]
15619 const Numeric S0_MPM93 = 6.140e-13; // line strength [1/Pa]
15620 const Numeric G0_MPM93 = 0.560e4; // line width [Hz/Pa]
15621 const Numeric XS0_MPM93 = 2.000; // temperature dependence of line strength
15622 const Numeric XG0_MPM93 = 0.800; // temperature dependence of line width
15623 // ---------------------------------------------------------------------------------------
15624
15625
15626 // select the parameter set (!!model dominates parameters!!):
15627 Numeric S0, G0, XS0, XG0;
15628 if ( model == "MPM93" )
15629 {
15630 S0 = S0_MPM93;
15631 G0 = G0_MPM93;
15632 XS0 = XS0_MPM93;
15633 XG0 = XG0_MPM93;
15634 }
15635 else if ( model == "user" )
15636 {
15637 S0 = S0in;
15638 G0 = G0in;
15639 XS0 = XS0in;
15640 XG0 = XG0in;
15641 }
15642 else
15643 {
15644 ostringstream os;
15645 os << "O2-SelfContMPM93: ERROR! Wrong model values given.\n"
15646 << "Valid models are: 'MPM93' and 'user'" << '\n';
15647 throw runtime_error(os.str());
15648 }
15649 out3 << "O2-SelfContMPM93: (model=" << model << ") parameter values in use:\n"
15650 << " S0 = " << S0 << "\n"
15651 << " G0 = " << G0 << "\n"
15652 << " XS0 = " << XS0 << "\n"
15653 << " XG0 = " << XG0 << "\n";
15654
15655
15656 const Index n_p = abs_p.nelem(); // Number of pressure levels
15657 const Index n_f = f_grid.nelem(); // Number of frequencies
15658
15659 // Check that dimensions of abs_p, abs_t, and vmr agree:
15660 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15660
, "n_p==abs_t.nelem()") : (void)0)
;
15661 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15661
, "n_p==vmr.nelem()") : (void)0)
;
15662
15663 // Check that dimensions of pxsec are consistent with n_f
15664 // and n_p. It should be [n_f,n_p]:
15665 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15665
, "n_f==pxsec.nrows()") : (void)0)
;
15666 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15666
, "n_p==pxsec.ncols()") : (void)0)
;
15667
15668 // const = VMR * ISORATIO = 0.20946 * 0.99519
15669 // this constant is already incorporated into the line strength, so we
15670 // have top devide the line strength by this value since arts multiplies pxsec
15671 // by these variables later in abs_coefCalc.
15672 const Numeric VMRISO = 0.2085;
15673
15674
15675 // Loop pressure/temperature:
15676 for ( Index i=0; i<n_p; ++i )
15677 {
15678 // check if O2-VMR is exactly zero (caused by zeropadding), then return 0.
15679 if (vmr[i] == 0.)
15680 {
15681 pxsec(joker, i) = 0.;
15682 continue;
15683 }
15684
15685 if (vmr[i] < VMRCalcLimit) // make sure that division by zero is excluded
15686 {
15687 ostringstream os;
15688 os << "ERROR: MPM93 O2 continuum absorption model has detected a O2 volume mixing ratio of "
15689 << vmr[i] << " which is below the threshold of " << VMRCalcLimit << ".\n"
15690 << "Therefore no calculation is performed.\n";
15691 throw runtime_error(os.str());
15692 return;
15693 }
15694 Numeric th = 300.0 / abs_t[i]; // Theta
15695 // continuum strength
15696 Numeric strength = S0 * abs_p[i] * (1.0000 - abs_h2o[i]) * pow( th, XS0 );
15697 // G0 from the input has to be converted to unit GHz/hPa --> * 1.0e-7
15698 Numeric gamma = G0 * abs_p[i] * pow( th, XG0 ); // Hz
15699
15700 // Loop frequency:
15701 for ( Index s=0; s<n_f; ++s )
15702 {
15703 // the vmr of O2 will be multiplied at the stage of absorption calculation:
15704 // abs / vmr * pxsec.
15705 pxsec(s,i) += (4.0 * PI / SPEED_OF_LIGHT) * // unit factor [1/(m*Hz)]
15706 (strength / VMRISO) * // strength [1]
15707 ( pow( f_grid[s], (Numeric)2.) * gamma / // line shape [Hz]
15708 ( pow( f_grid[s], (Numeric)2.) + pow( gamma, (Numeric)2.) ) );
15709 }
15710 }
15711 return;
15712}
15713//
15714// #################################################################################
15715//
15716//! 3) O2-air
15717/*!
15718 P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
15719 "Atmospheric Remote Sensing by Microwave Radiometry",
15720 John Wiley & Sons, Inc., 1993. Also stated in
15721 Liebe et al. JQSRT, Vol 48, Nr 5/6, pp. 629-643, 1992.
15722 Default continuum parameters are C=1.6E-17*10E-9, x=0.8
15723
15724 \param[out] pxsec cross section (absorption/volume mixing ratio) of
15725 O2-continuum according to Rosenkranz 1993 [1/m]
15726 \param S0in line strength [K²/(Hz*Pa*m)]
15727 \param G0in line width [Hz/Pa]
15728 \param XS0in line strength temperature exponent [1]
15729 \param XG0in line widths temperature exponent [1]
15730 \param model allows user defined input parameter set
15731 (S0in, G0in, XS0in, and XG0in)<br> or choice of
15732 pre-defined parameters of specific models (see note below).
15733 \param f_grid predefined frequency grid [Hz]
15734 \param abs_p predefined pressure grid [Pa]
15735 \param abs_t predefined temperature grid [K]
15736 \param abs_h2o H2O volume mixing ratio profile [1]
15737 \param vmr O2 volume mixing ratio profile [1]
15738
15739 \note Except for model 'user' the input parameters S0in, G0in, XS0in, and XG0in
15740 are neglected (model dominates over parameters).<br>
15741 Allowed models: 'Rosenkranz' and 'user'.
15742 See the user guide for detailed explanations.
15743
15744 \remark Reference: P. W. Rosenkranz, Chapter 2, in M. A. Janssen, <br>
15745 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
15746 John Wiley & Sons, Inc., 1993.
15747
15748 \author Thomas Kuhn
15749 \date 2001-11-05
15750 */
15751
15752void Rosenkranz_O2_continuum (MatrixView pxsec,
15753 const Numeric S0in, // model parameter
15754 const Numeric G0in, // model parameter
15755 const Numeric XS0in, // model parameter
15756 const Numeric XG0in, // model parameter
15757 const String& model,
15758 ConstVectorView f_grid,
15759 ConstVectorView abs_p, // total pressure [Pa]
15760 ConstVectorView abs_t,
15761 ConstVectorView abs_h2o, // H2O VMR
15762 ConstVectorView vmr _U___attribute((unused)), // O2 VMR
15763 const Verbosity& verbosity)
15764{
15765 CREATE_OUT3ArtsOut3 out3(verbosity);
15766
15767 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15768 // P. W. Rosenkranz, Chapter 2, in M. A. Janssen,
15769 // Atmospheric Remote Sensing by Microwave Radiometry, John Wiley & Sons, Inc., 1993
15770 // ftp://mesa.mit.edu/phil/lbl_rt
15771 const Numeric S0_PWR93 = 1.11e-14; // [K²/(Hz*Pa*m)] line strength
15772 const Numeric G0_PWR93 = 5600.000; // line width [Hz/Pa]
15773 const Numeric XS0_PWR93 = 2.000; // temperature dependence of line strength
15774 const Numeric XG0_PWR93 = 0.800; // temperature dependence of line width
15775 // ---------------------------------------------------------------------------------------
15776
15777 // select the parameter set (!!model dominates values!!):
15778 Numeric S0, G0, XS0, XG0;
15779 if ( model == "Rosenkranz" )
15780 {
15781 S0 = S0_PWR93;
15782 G0 = G0_PWR93;
15783 XS0 = XS0_PWR93;
15784 XG0 = XG0_PWR93;
15785 }
15786 else if ( model == "user" )
15787 {
15788 S0 = S0in;
15789 G0 = G0in;
15790 XS0 = XS0in;
15791 XG0 = XG0in;
15792 }
15793 else
15794 {
15795 ostringstream os;
15796 os << "O2-SelfContPWR93: ERROR! Wrong model values given.\n"
15797 << "Valid models are: 'Rosenkranz' and 'user'" << '\n';
15798 throw runtime_error(os.str());
15799 }
15800 out3 << "O2-SelfContPWR93: (model=" << model << ") parameter values in use:\n"
15801 << " S0 = " << S0 << "\n"
15802 << " G0 = " << G0 << "\n"
15803 << " XS0 = " << XS0 << "\n"
15804 << " XG0 = " << XG0 << "\n";
15805
15806
15807 const Index n_p = abs_p.nelem(); // Number of pressure levels
15808 const Index n_f = f_grid.nelem(); // Number of frequencies
15809
15810 // Check that dimensions of abs_p, abs_t, and vmr agree:
15811 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15811
, "n_p==abs_t.nelem()") : (void)0)
;
15812 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15812
, "n_p==vmr.nelem()") : (void)0)
;
15813
15814 // Check that dimensions of pxsec are consistent with n_f
15815 // and n_p. It should be [n_f,n_p]:
15816 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15816
, "n_f==pxsec.nrows()") : (void)0)
;
15817 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15817
, "n_p==pxsec.ncols()") : (void)0)
;
15818
15819 // loop over all pressure levels:
15820 for ( Index i=0; i<n_p; ++i )
15821 {
15822 Numeric TH = 300.00 / abs_t[i]; // relative temperature [1]
15823
15824 Numeric ph2o = abs_p[i] * abs_h2o[i]; // water vapor partial pressure [Pa]
15825 Numeric pdry = abs_p[i] - ph2o; // dry air partial pressure [Pa]
15826
15827
15828 // pseudo broadening term [Hz]
15829 Numeric gamma = G0 * (pdry * pow( TH, XG0 ) + 1.100 * ph2o * TH);
15830
15831 // Loop over frequency grid:
15832 for ( Index s=0; s<n_f; ++s )
15833 {
15834 // division by vmr of O2 is necessary because of the absorption calculation
15835 // abs = vmr * pxsec.
15836 pxsec(s,i) += S0 * abs_p[i] / pow( abs_t[i], XS0 ) *
15837 ( pow( f_grid[s], (Numeric)2. )
15838 * gamma / ( pow( f_grid[s], 2 )
15839 + pow( gamma, (Numeric)2. ) ) ) ;
15840 }
15841 }
15842}
15843//
15844//
15845// #################################################################################
15846//! Standard_O2_continuum
15847/*!
15848 \param[out] pxsec cross section (absorption/volume mixing ratio) of
15849 O2-continuum according to Rosenkranz 1993 [1/m]
15850 \param Cin O2-continuum coefficient [1/(Hz*Pa*m)]
15851 \param G0in line width [Hz/Pa]
15852 \param G0Ain dry air broadening parameter [1]
15853 \param G0Bin water vapor broadening parameter [1]
15854 \param XG0din line strength temperature exponent [1]
15855 \param XG0win line widths temperature exponent [1]
15856 \param model allows user defined input parameter set
15857 (S0in, G0in, XS0in, and XG0in)<br> or choice of
15858 pre-defined parameters of specific models (see note below).
15859 \param f_grid predefined frequency grid [Hz]
15860 \param abs_p predefined pressure grid [Pa]
15861 \param abs_t predefined temperature grid [K]
15862 \param abs_h2o H2O volume mixing ratio profile [1]
15863 \param vmr O2 volume mixing ratio profile [1]
15864
15865 \note Except for model 'user' the input parameters S0in, G0in, XS0in, and XG0in
15866 are neglected (model dominates over parameters).<br>
15867 Allowed models: 'Rosenkranz' and 'user'.
15868 See the user guide for detailed explanations.
15869
15870 \remark Reference: P. W. Rosenkranz, Chapter 2, in M. A. Janssen, <br>
15871 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
15872 John Wiley & Sons, Inc., 1993.<br>
15873 <br>
15874 Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
15875 <i>Propagation modeling of moist air and suspended water/ice
15876 particles at frequencies below 1000 GHz</i>,<br>
15877 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
15878 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
15879
15880 \author Thomas Kuhn
15881 \date 2001-11-05
15882 */
15883
15884void Standard_O2_continuum (MatrixView pxsec, // cross section
15885 const Numeric Cin, // model parameter
15886 const Numeric G0in, // model parameter
15887 const Numeric G0Ain, // model parameter
15888 const Numeric G0Bin, // model parameter
15889 const Numeric XG0din, // model parameter
15890 const Numeric XG0win, // model parameter
15891 const String& model, // model parameter
15892 ConstVectorView f_grid, // frequency grid
15893 ConstVectorView abs_p, // P_tot grid
15894 ConstVectorView abs_t, // T grid
15895 ConstVectorView abs_h2o, // VMR H2O profile
15896 ConstVectorView vmr _U___attribute((unused)), // VMR O2 profile
15897 const Verbosity& verbosity)
15898{
15899 CREATE_OUT3ArtsOut3 out3(verbosity);
15900
15901 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
15902 // P. W. Rosenkranz, Chapter 2, in M. A. Janssen,
15903 // Atmospheric Remote Sensing by Microwave Radiometry, John Wiley & Sons, Inc., 1993
15904 // ftp://mesa.mit.edu/phil/lbl_rt
15905 const Numeric C_PWR93 = (1.108e-14/pow((Numeric)3.0e2,(Numeric)2.)); // [1/(Hz*Pa*m)] line strength
15906 const Numeric G0_PWR93 = 5600.000; // line width [Hz/Pa]
15907 const Numeric G0A_PWR93 = 1.000; // line width [1]
15908 const Numeric G0B_PWR93 = 1.100; // line width [1]
15909 const Numeric XG0d_PWR93 = 0.800; // temperature dependence of line width [1]
15910 const Numeric XG0w_PWR93 = 1.000; // temperature dependence of line width [1]
15911 //
15912 // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
15913 // "Propagation modeling of moist air and suspended water/ice
15914 // particles at frequencies below 1000 GHz",
15915 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
15916 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
15917 // const Numeric C_MPM93 = 1.23e-19; // line strength/VMR [1/m*1/Hz*1/Pa]
15918 const Numeric C_MPM93 = 6.14e-13*(4.0*PI/SPEED_OF_LIGHT)/0.2085; // line strength [1/m*1/Hz*1/Pa]
15919 // 0.2085 = VMR * ISORATIO = 0.20946 * 0.99519
15920 const Numeric G0_MPM93 = 5600.000; // line width [Hz/Pa]
15921 const Numeric G0A_MPM93 = 1.000; // line width [1]
15922 const Numeric G0B_MPM93 = 1.000; // line width [1]
15923 const Numeric XG0d_MPM93 = 0.800; // temperature dependence of line strength [1]
15924 const Numeric XG0w_MPM93 = 0.800; // temperature dependence of line width [1]
15925 // ---------------------------------------------------------------------------------------
15926
15927 // select the parameter set (!!model dominates values!!):
15928 Numeric C, G0, G0A, G0B, XG0d, XG0w;
15929 if ( model == "Rosenkranz" )
15930 {
15931 C = C_PWR93;
15932 G0 = G0_PWR93;
15933 G0A = G0A_PWR93;
15934 G0B = G0B_PWR93;
15935 XG0d = XG0d_PWR93;
15936 XG0w = XG0w_PWR93;
15937 }
15938 else if ( model == "MPM93" )
15939 {
15940 C = C_MPM93;
15941 G0 = G0_MPM93;
15942 G0A = G0A_MPM93;
15943 G0B = G0B_MPM93;
15944 XG0d = XG0d_MPM93;
15945 XG0w = XG0w_MPM93;
15946 }
15947 else if ( model == "user" )
15948 {
15949 C = Cin;
15950 G0 = G0in;
15951 G0A = G0Ain;
15952 G0B = G0Bin;
15953 XG0d = XG0din;
15954 XG0w = XG0win;
15955 }
15956 else
15957 {
15958 ostringstream os;
15959 os << "O2-GenerealCont: ERROR! Wrong model values given.\n"
15960 << "Valid models are: 'Rosenkranz', 'MPM93' and 'user'" << '\n';
15961 throw runtime_error(os.str());
15962 }
15963 out3 << "O2-GeneralCont: (model=" << model << ") parameter values in use:\n"
15964 << " C = " << C << "\n"
15965 << " G0 = " << G0 << "\n"
15966 << " G0A = " << G0A << "\n"
15967 << " G0B = " << G0B << "\n"
15968 << " XG0d = " << XG0d << "\n"
15969 << " XG0w = " << XG0w << "\n";
15970
15971
15972 const Index n_p = abs_p.nelem(); // Number of pressure levels
15973 const Index n_f = f_grid.nelem(); // Number of frequencies
15974
15975 // Check that dimensions of abs_p, abs_t, and vmr agree:
15976 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15976
, "n_p==abs_t.nelem()") : (void)0)
;
15977 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15977
, "n_p==vmr.nelem()") : (void)0)
;
15978
15979 // Check that dimensions of pxsec are consistent with n_f
15980 // and n_p. It should be [n_f,n_p]:
15981 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15981
, "n_f==pxsec.nrows()") : (void)0)
;
15982 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 15982
, "n_p==pxsec.ncols()") : (void)0)
;
15983
15984 // const = VMR * ISORATIO = 0.20946 * 0.99519
15985 // this constant is already incorporated into the line strength, so we
15986 // have top devide the line strength by this value since arts multiplies pxsec
15987 // by these variables later in abs_coefCalc.
15988 // FIXME const Numeric VMRISO = 0.2085;
15989
15990 // loop over all pressure levels:
15991 for ( Index i=0; i<n_p; ++i )
15992 {
15993 Numeric TH = 3.0e2 / abs_t[i]; // relative temperature [1]
15994
15995 Numeric ph2o = abs_p[i] * abs_h2o[i]; // water vapor partial pressure [Pa]
15996 Numeric pdry = abs_p[i] - ph2o; // dry air partial pressure [Pa]
15997
15998
15999 // pseudo broadening term [Hz]
16000 Numeric gamma = G0 * (G0A * pdry * pow( TH, XG0d ) + G0B * ph2o * pow( TH, XG0w ));
16001
16002 // Loop over frequency grid:
16003 for ( Index s=0; s<n_f; ++s )
16004 {
16005 // division by vmr of O2 is necessary because of the absorption calculation
16006 // abs = vmr * pxsec.
16007 pxsec(s,i) += C * abs_p[i] * pow( TH, (Numeric)2. ) *
16008 ( gamma * pow( f_grid[s], (Numeric)2. ) /
16009 ( pow( f_grid[s], 2 ) + pow( gamma, (Numeric)2. ) ) );
16010 }
16011 }
16012}
16013//
16014// #################################################################################
16015// ################################ NITROGEN MODELS ################################
16016// #################################################################################
16017//
16018//! Borysow-Frommhold 1986 N2-N2 CIA absorption model;
16019/*!
16020 see publication A. Borysow and L. Frommhold,
16021 The Astrophysical Journal, vol.311, pp.1043-1057, 1986
16022 see http://adsabs.harvard.edu/article_service.html for a scanned
16023 version of the paper
16024
16025 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16026 N2-CIA according to BF-86 model [1/m]
16027 \param Cin strength scaling factor [1]
16028 \param model allows user defined input parameter set
16029 (Cin)<br> or choice of
16030 pre-defined parameters of specific models (see note below).
16031 \param f_grid predefined frequency grid [Hz]
16032 \param abs_p predefined pressure grid [Pa]
16033 \param abs_t predefined temperature grid [K]
16034 \param vmr N2 volume mixing ratio profile [1]
16035
16036 \note this "crude" version of the N2-N2 model is a f2c
16037 conversion of the N2-N2 F77 code of Prof. A. Borysow.
16038 The original code can be downloaded at
16039 <a href="http://www.astro.ku.dk/~aborysow/">F77 code</a>.
16040
16041 \remark Reference: A. Borysow and L. Frommhold,
16042 The Astrophysical Journal, vol.311, pp.1043-1057, 1986
16043 see <a href="http://adsabs.harvard.edu/article_service.html">for a scanned
16044 version of the paper</a>.
16045
16046 \author Thomas Kuhn
16047 \date 2002-03-05
16048*/
16049void BF86_CIA_N2 (MatrixView pxsec,
16050 const Numeric Cin,
16051 const String& model,
16052 ConstVectorView f_grid,
16053 ConstVectorView abs_p,
16054 ConstVectorView abs_t,
16055 ConstVectorView vmr,
16056 const Verbosity& verbosity)
16057{
16058 CREATE_OUT3ArtsOut3 out3(verbosity);
16059
16060 //
16061 //
16062 // external function to call (original F77 code translated with f2c)
16063 extern Numeric n2n2tks_(double t, double f);
16064 //
16065 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
16066 // standard values for the MPM93 H2O continuum model
16067 // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
16068 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
16069 Numeric XFAC = 1.0000; // scaling factor
16070 // ---------------------------------------------------------------------------------------
16071
16072 // select the parameter set (!!model dominates values!!):
16073 if ( model == "BF86" )
16074 {
16075 XFAC = 1.0000;
16076 }
16077 else if ( model == "user" )
16078 {
16079 XFAC = Cin;
16080 }
16081 else
16082 {
16083 ostringstream os;
16084 os << "N2-SelfContBorysow: ERROR! Wrong model values given.\n"
16085 << "allowed models are: 'BF86', 'user'" << '\n';
16086 throw runtime_error(os.str());
16087 }
16088
16089 out3 << "N2-SelfContBorysow: (model=" << model << ") parameter values in use:\n"
16090 << " XFAC = " << XFAC << "\n";
16091
16092 const Index n_p = abs_p.nelem(); // Number of pressure levels
16093 const Index n_f = f_grid.nelem(); // Number of frequencies
16094
16095
16096 const Numeric AMAG2DEN = 44.53807; // inverse of N2 mol volume at std p/T
16097 const Numeric RIDGAS = 8.314510; // ideal gas constant
16098
16099 // Check that dimensions of abs_p, abs_t, and vmr agree:
16100 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16100
, "n_p==abs_t.nelem()") : (void)0)
;
16101 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16101
, "n_p==vmr.nelem()") : (void)0)
;
16102
16103 // Check that dimensions of pxsec are consistent with n_f
16104 // and n_p. It should be [n_f,n_p]:
16105 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16105
, "n_f==pxsec.nrows()") : (void)0)
;
16106 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16106
, "n_p==pxsec.ncols()") : (void)0)
;
16107
16108 // Loop pressure/temperature:
16109 for ( Index i=0; i<n_p; ++i )
16110 {
16111 //cout << "------------------------------------------------\n";
16112 double T = (double) abs_t[i];
16113 //cout << "N2-N2 BF86: T =" << T << " K\n";
16114 //cout << "N2-N2 BF86: p =" << abs_p[i] << " Pa\n";
16115 //cout << "N2-N2 BF86: VMR =" << vmr[i] << "\n";
16116 Numeric XAMA = (abs_p[i]) / ( AMAG2DEN * RIDGAS * abs_t[i] );
16117 Numeric XAMA2 = pow(XAMA,(Numeric)2.);
16118 //cout << "N2-N2 BF86: XAMA =" << XAMA << "\n";
16119
16120 // Loop frequency:
16121 for ( Index s=0; s<n_f; ++s )
16122 {
16123 // the second vmr of N2 will be multiplied at the stage of
16124 // absorption calculation: abs = vmr * pxsec.
16125 double f = (double) f_grid[s];
16126 //cout << "N2-N2 BF86: f =" << f << " Hz\n";
16127 double cont = n2n2tks_(T, f);
16128 pxsec(s,i) += (Numeric) (cont * 1.000e2 * vmr[i] * XAMA2);
16129 //cout << "N2-N2 BF86: cont =" << cont << " cm-1 * amagat-2\n";
16130 //cout << "N2-N2 BF86: abs =" << (vmr[i] * pxsec(s,i)) << " m-1\n";
16131 }
16132 }
16133 return;
16134}
16135//
16136// #################################################################################
16137//
16138//! MPM93 N2 continuum
16139/*!
16140 see publication side of National Telecommunications and Information Administration
16141 http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
16142 and ftp side for downloading the MPM93 original source code:
16143 ftp://ftp.its.bldrdoc.gov/pub/mpm93/
16144
16145 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16146 N2-continuum according to MPM93 [1/m]
16147 \param Cin continuum strength [ppm/GHz]
16148 \param Gin width parameter [Hz/Pa]
16149 \param xTin continuum strength temperature exponent [1]
16150 \param xfin continuum frequency exponent [1]
16151 \param model allows user defined input parameter set
16152 (Cin, Gin, xTin, and xfin)<br> or choice of
16153 pre-defined parameters of specific models (see note below).
16154 \param f_grid predefined frequency grid [Hz]
16155 \param abs_p predefined pressure grid [Pa]
16156 \param abs_t predefined temperature grid [K]
16157 \param abs_h2o H2O volume mixing ratio profile [1]
16158 \param vmr N2 volume mixing ratio profile [1]
16159
16160 \note Except for model 'user' the input parameters Cin, Gin, xTin, and xfin
16161 are neglected (model dominates over parameters).<br>
16162 Allowed models: 'MPM93' and 'user'.
16163 See the user guide for detailed explanations.
16164
16165 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
16166 <i>Propagation modeling of moist air and suspended water/ice
16167 particles at frequencies below 1000 GHz</i>,<br>
16168 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
16169 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
16170
16171 \author Thomas Kuhn
16172 \date 2001-11-05
16173 */
16174
16175void MPM93_N2_continuum (MatrixView pxsec,
16176 const Numeric Cin,
16177 const Numeric Gin,
16178 const Numeric xTin,
16179 const Numeric xfin,
16180 const String& model,
16181 ConstVectorView f_grid,
16182 ConstVectorView abs_p,
16183 ConstVectorView abs_t,
16184 ConstVectorView abs_h2o,
16185 ConstVectorView vmr,
16186 const Verbosity& verbosity)
16187{
16188 CREATE_OUT3ArtsOut3 out3(verbosity);
16189
16190 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
16191 // standard values for the MPM93 H2O continuum model
16192 // (AGARD 52nd Specialists Meeting of the Electromagnetic Wave
16193 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21):
16194 const Numeric xT_MPM93 = 3.500; // temperature exponent [1]
16195 const Numeric xf_MPM93 = 1.500; // frequency exponent [1]
16196 const Numeric gxf_MPM93 = 9.000*xf_MPM93; // needed for the unit conversion of G_MPM93
16197 const Numeric S_MPM93 = 2.296e-31; // line strength [1/Pa² * 1/Hz]
16198 const Numeric G_MPM93 = 1.930e-5*pow((Numeric)10.000, -gxf_MPM93); // frequency factor [1/Hz^xf]
16199 // ---------------------------------------------------------------------------------------
16200
16201 // select the parameter set (!!model dominates values!!):
16202 Numeric S0, G0, xf, xT;
16203 //Numeric gxf;
16204 if ( model == "MPM93" )
16205 {
16206 S0 = S_MPM93;
16207 G0 = G_MPM93;
16208 xT = xT_MPM93;
16209 xf = xf_MPM93;
16210 //gxf = gxf_MPM93;
16211 }
16212 else if ( model == "MPM93Scale" )
16213 {
16214 S0 = Cin * S_MPM93;
16215 G0 = G_MPM93;
16216 xT = xT_MPM93;
16217 xf = xf_MPM93;
16218 //gxf = gxf_MPM93;
16219 }
16220 else if ( model == "user" )
16221 {
16222 S0 = Cin;
16223 G0 = Gin;
16224 xT = xTin;
16225 xf = xfin;
16226 //gxf = 9.000*xf;
16227 }
16228 else
16229 {
16230 ostringstream os;
16231 os << "N2-SelfContMPM93 : ERROR! Wrong model values given.\n"
16232 << "allowed models are: 'MPM93', 'MPM93Scale' or 'user'" << '\n';
16233 throw runtime_error(os.str());
16234 }
16235
16236 out3 << "N2-SelfContMPM93: (model=" << model << ") parameter values in use:\n"
16237 << " S0 = " << S0 << "\n"
16238 << " G0 = " << G0 << "\n"
16239 << " xT = " << xT << "\n"
16240 << " xf = " << xf << "\n";
16241
16242 // unit conversion internally:
16243 //const Numeric S0unitconv = 1.000e+13; // x [1/(hPa²*GHz)] => y [1/(pa²*Hz)]
16244 //const Numeric G0unitconv = pow(10.000, gxf);
16245
16246 const Index n_p = abs_p.nelem(); // Number of pressure levels
16247 const Index n_f = f_grid.nelem(); // Number of frequencies
16248
16249 // Check that dimensions of abs_p, abs_t, and vmr agree:
16250 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16250
, "n_p==abs_t.nelem()") : (void)0)
;
16251 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16251
, "n_p==vmr.nelem()") : (void)0)
;
16252
16253 // Check that dimensions of pxsec are consistent with n_f
16254 // and n_p. It should be [n_f,n_p]:
16255 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16255
, "n_f==pxsec.nrows()") : (void)0)
;
16256 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16256
, "n_p==pxsec.ncols()") : (void)0)
;
16257
16258 Numeric fac = 4.0 * PI / SPEED_OF_LIGHT; // = 4 * pi / c
16259 // Loop pressure/temperature:
16260 for ( Index i=0; i<n_p; ++i )
16261 {
16262 Numeric th = 300.0 / abs_t[i];
16263 Numeric strength = S0 *
16264 pow( (abs_p[i] * ((Numeric)1.0000 - abs_h2o[i])),
16265 (Numeric)2. )
16266 * pow( th, xT );
16267
16268 // Loop frequency:
16269 for ( Index s=0; s<n_f; ++s )
16270 {
16271 // FIXME Numeric f = f_grid[s] * Hz_to_GHz; // frequency in GHz
16272 // the vmr of N2 will be multiplied at the stage of absorption calculation:
16273 // abs / vmr * pxsec.
16274 pxsec(s,i) += fac * strength * // strength
16275 pow(f_grid[s], (Numeric)2.) / // frequency dependence
16276 ( 1.000 + G0 * pow( f_grid[s], xf) ) *
16277 vmr[i]; // N2 vmr
16278 }
16279 }
16280 return;
16281}
16282//
16283// #################################################################################
16284//! Pardo_ATM_N2_dry_continuum
16285/*!
16286 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16287 N2-continuum according to Rosenkranz, 1993 [1/m]
16288 \param Cin continuum strength [1/m * 1/(Hz*Pa)²]
16289 \param model allows user defined input parameter set
16290 (Cin and xTin)<br> or choice of
16291 pre-defined parameters of specific models (see note below).
16292 \param f_grid predefined frequency grid [Hz]
16293 \param abs_p predefined pressure grid [Pa]
16294 \param abs_t predefined temperature grid [K]
16295 \param vmr N2 volume mixing ratio [1]
16296 \param h2ovmr H2O volume mixing ratio [1]
16297
16298 \note Except for model 'user' the input parameters Cin and xTin
16299 are neglected (model dominates over parameters).<br>
16300 Allowed models: 'ATM', and 'user'.
16301 See the user guide for detailed explanations.
16302
16303 \remark Reference: Pardo et al., IEEE, Trans. Ant. Prop., <br>
16304 Vol 49, No 12, pp. 1683-1694, 2001.
16305
16306 \author Thomas Kuhn
16307 \date 2001-04-10
16308 */
16309
16310void Pardo_ATM_N2_dry_continuum (MatrixView pxsec,
16311 const Numeric Cin,
16312 const String& model,
16313 ConstVectorView f_grid,
16314 ConstVectorView abs_p,
16315 ConstVectorView abs_t,
16316 ConstVectorView vmr,
16317 ConstVectorView h2ovmr,
16318 const Verbosity& verbosity)
16319{
16320 CREATE_OUT3ArtsOut3 out3(verbosity);
16321
16322 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
16323 // standard values for the Pardo et al. model (IEEE, Trans. Ant. Prop.,
16324 // Vol 49, No 12, pp. 1683-1694, 2001)
16325 const Numeric C_ATM = 2.612e-6; // [1/m]
16326 // ---------------------------------------------------------------------------------------
16327
16328 // select the parameter set (!!model dominates parameters!!):
16329 Numeric C;
16330 if ( model == "ATM" )
16331 {
16332 C = C_ATM;
16333 }
16334 else if ( model == "user" )
16335 {
16336 C = Cin;
16337 }
16338 else
16339 {
16340 ostringstream os;
16341 os << "N2-DryContATM01: ERROR! Wrong model values given.\n"
16342 << "allowed models are: 'ATM', 'user'" << '\n';
16343 throw runtime_error(os.str());
16344 }
16345 out3 << "N2-DryContATM01: (model=" << model << ") parameter values in use:\n"
16346 << " C_s = " << C << "\n";
16347
16348 const Index n_p = abs_p.nelem(); // Number of pressure levels
16349 const Index n_f = f_grid.nelem(); // Number of frequencies
16350
16351 // Check that dimensions of abs_p, abs_t, and vmr agree:
16352 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16352
, "n_p==abs_t.nelem()") : (void)0)
;
16353 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16353
, "n_p==vmr.nelem()") : (void)0)
;
16354
16355 // Check that dimensions of pxsec are consistent with n_f
16356 // and n_p. It should be [n_f,n_p]:
16357 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16357
, "n_f==pxsec.nrows()") : (void)0)
;
16358 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16358
, "n_p==pxsec.ncols()") : (void)0)
;
16359
16360 // Loop over pressure/temperature grid:
16361 for ( Index i=0; i<n_p; ++i )
16362 {
16363 // since this is an effective "dry air" continuum, it is not really
16364 // it is not specifically attributed to N2, so we need the total
16365 // dry air part in total which is equal to the total minus the
16366 // water vapor pressure:
16367 Numeric pd = abs_p[i] * ( 1.00000e0 - h2ovmr[i] ); // [Pa]
16368 // Loop over frequency grid:
16369 if (vmr[i] > VMRCalcLimit )
16370 {
16371 for ( Index s=0; s<n_f; ++s )
16372 {
16373 // Becaue this is an effective "dry air" continuum, it is not really
16374 // specific N2 but mainly caused by N2. Therefore the N2 vmr must be
16375 // canceled out here which is later in abs_coefCalc multiplied
16376 // (calculation: abs = vmr * pxsec):
16377 pxsec(s,i) += C * // strength [1/(m*Hz²Pa²)]
16378 pow( (f_grid[s]/(Numeric)2.25e11), (Numeric)2. ) * // quadratic f dependence [Hz²]
16379 pow( ((Numeric)300.0/abs_t[i]), (Numeric)3.5 ) * // free T dependence [1]
16380 pow( (pd/(Numeric)1.01300e5), (Numeric)2. ) / // quadratic p dependence [Pa²]
16381 vmr[i]; // cancel the vmr dependency
16382 }
16383 }
16384 }
16385}
16386//
16387// #################################################################################
16388//! Rosenkranz_N2_self_continuum
16389/*!
16390 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16391 N2-continuum according to Rosenkranz, 1993 [1/m]
16392 \param Cin continuum strength [1/m * 1/(Hz*Pa)²]
16393 \param xin temperature exponent of N2-continuum [1]
16394 \param model allows user defined input parameter set
16395 (Cin and xTin)<br> or choice of
16396 pre-defined parameters of specific models (see note below).
16397 \param f_grid predefined frequency grid [Hz]
16398 \param abs_p predefined pressure grid [Pa]
16399 \param abs_t predefined temperature grid [K]
16400 \param vmr H2O volume mixing ratio [1]
16401
16402 \note Except for model 'user' the input parameters Cin and xTin
16403 are neglected (model dominates over parameters).<br>
16404 Allowed models: 'Rosenkranz', and 'user'.
16405 See the user guide for detailed explanations.
16406
16407 \remark Reference: P. W. Rosenkranz, Chapter 2, pp 74, in M. A. Janssen, <br>
16408 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
16409 John Wiley & Sons, Inc., 1993.
16410
16411 \author Thomas Kuhn
16412 \date 2001-11-05
16413 */
16414
16415void Rosenkranz_N2_self_continuum (MatrixView pxsec,
16416 const Numeric Cin,
16417 const Numeric xin,
16418 const String& model,
16419 ConstVectorView f_grid,
16420 ConstVectorView abs_p,
16421 ConstVectorView abs_t,
16422 ConstVectorView vmr,
16423 const Verbosity& verbosity)
16424{
16425 CREATE_OUT3ArtsOut3 out3(verbosity);
16426
16427 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
16428 // standard values for the Rosenkranz model (Chapter 2, pp 74, in M. A. Janssen,
16429 // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
16430 const Numeric C_PWR = 1.05e-38; // [1/(Pa²*Hz²*m)]
16431 const Numeric x_PWR = 3.55; // [1]
16432 // ---------------------------------------------------------------------------------------
16433
16434 // select the parameter set (!!model dominates parameters!!):
16435 Numeric C, x;
16436 if ( model == "Rosenkranz" )
16437 {
16438 C = C_PWR;
16439 x = x_PWR;
16440 }
16441 else if ( model == "user" )
16442 {
16443 C = Cin;
16444 x = xin;
16445 }
16446 else
16447 {
16448 ostringstream os;
16449 os << "N2-SelfContPWR93: ERROR! Wrong model values given.\n"
16450 << "allowed models are: 'Rosenkranz', 'user'" << '\n';
16451 throw runtime_error(os.str());
16452 }
16453 out3 << "N2-SelfContPWR93: (model=" << model << ") parameter values in use:\n"
16454 << " C_s = " << C << "\n"
16455 << " x_s = " << x << "\n";
16456
16457 const Index n_p = abs_p.nelem(); // Number of pressure levels
16458 const Index n_f = f_grid.nelem(); // Number of frequencies
16459
16460 // Check that dimensions of abs_p, abs_t, and vmr agree:
16461 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16461
, "n_p==abs_t.nelem()") : (void)0)
;
16462 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16462
, "n_p==vmr.nelem()") : (void)0)
;
16463
16464 // Check that dimensions of pxsec are consistent with n_f
16465 // and n_p. It should be [n_f,n_p]:
16466 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16466
, "n_f==pxsec.nrows()") : (void)0)
;
16467 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16467
, "n_p==pxsec.ncols()") : (void)0)
;
16468
16469 // Loop over pressure/temperature grid:
16470 for ( Index i=0; i<n_p; ++i )
16471 {
16472 // Loop over frequency grid:
16473 for ( Index s=0; s<n_f; ++s )
16474 {
16475 // The second vmr of N2 will be multiplied at the stage of absorption
16476 // calculation: abs = vmr * pxsec.
16477 pxsec(s,i) += C * // strength [1/(m*Hz²Pa²)]
16478 pow( f_grid[s], (Numeric)2. ) * // quadratic f dependence [Hz²]
16479 pow( (Numeric)300.0/abs_t[i], x ) * // free T dependence [1]
16480 pow( abs_p[i], (Numeric)2. ) * // quadratic p dependence [Pa²]
16481 vmr[i]; // second N2-VMR at the stage
16482 // of absorption calculation
16483 }
16484 }
16485}
16486//
16487// #################################################################################
16488//
16489//! 4) N2-N2
16490/*!
16491 P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
16492 "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
16493
16494 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16495 N2-continuum according to Rosenkranz, 1993 [1/m]
16496 \param Cin continuum strength [1/m * 1/(Hz*Pa)²]
16497 \param xfin continuum frequency exponent [1]
16498 \param xtin continuum strength temperature exponent [1]
16499 \param xpin continuum strength pressure exponent [1]
16500 \param model allows user defined input parameter set
16501 (Cin, xfin, xtin, and xpin)<br> or choice of
16502 pre-defined parameters of specific models (see note below).
16503 \param f_grid predefined frequency grid [Hz]
16504 \param abs_p predefined pressure grid [Pa]
16505 \param abs_t predefined temperature grid [K]
16506 \param vmr H2O volume mixing ratio [1]
16507
16508 \note Except for model 'user' the input parameters Cin, xfin, xtin, and xpin
16509 are neglected (model dominates over parameters).<br>
16510 Allowed models: 'Rosenkranz', and 'user'.
16511 See the user guide for detailed explanations.
16512
16513 \remark Reference: P. W. Rosenkranz, Chapter 2, in M. A. Janssen, <br>
16514 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
16515 John Wiley & Sons, Inc., 1993.
16516
16517 \author Thomas Kuhn
16518 \date 2001-11-05
16519 */
16520
16521void Standard_N2_self_continuum (MatrixView pxsec,
16522 const Numeric Cin,
16523 const Numeric xfin,
16524 const Numeric xtin,
16525 const Numeric xpin,
16526 const String& model,
16527 ConstVectorView f_grid,
16528 ConstVectorView abs_p,
16529 ConstVectorView abs_t,
16530 ConstVectorView vmr,
16531 const Verbosity& verbosity)
16532{
16533 CREATE_OUT3ArtsOut3 out3(verbosity);
16534
16535 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
16536 // standard values for the Rosenkranz model, Chapter 2, pp 74, in M. A. Janssen,
16537 // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
16538 const Numeric C_GM = 1.05e-38; // [1/(Pa²*Hz²*m)]
16539 const Numeric xf_GM = 2.00; // [1]
16540 const Numeric xt_GM = 3.55; // [1]
16541 const Numeric xp_GM = 2.00; // [1]
16542 // ---------------------------------------------------------------------------------------
16543
16544 // select the parameter set (!!model dominates over values!!):
16545 Numeric C, xt, xf, xp;
16546 if ( model == "Rosenkranz" )
16547 {
16548 C = C_GM;
16549 xt = xt_GM;
16550 xf = xf_GM;
16551 xp = xp_GM;
16552 }
16553 else if ( model == "user" )
16554 {
16555 C = Cin;
16556 xt = xtin;
16557 xf = xfin;
16558 xp = xpin;
16559 }
16560 else
16561 {
16562 ostringstream os;
16563 os << "N2-SelfContStandardType: ERROR! Wrong model values given.\n"
16564 << "allowed models are: 'Rosenkranz', 'user'" << '\n';
16565 throw runtime_error(os.str());
16566 }
16567 out3 << "N2-SelfContStandardType: (model=" << model << ") parameter values in use:\n"
16568 << " C = " << C << "\n"
16569 << " xt = " << xt << "\n"
16570 << " xf = " << xf << "\n"
16571 << " xp = " << xp << "\n";
16572
16573
16574 const Index n_p = abs_p.nelem(); // Number of pressure levels
16575 const Index n_f = f_grid.nelem(); // Number of frequencies
16576
16577 // Check that dimensions of abs_p, abs_t, and vmr agree:
16578 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16578
, "n_p==abs_t.nelem()") : (void)0)
;
16579 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16579
, "n_p==vmr.nelem()") : (void)0)
;
16580
16581 // Check that dimensions of pxsec are consistent with n_f
16582 // and n_p. It should be [n_f,n_p]:
16583 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16583
, "n_f==pxsec.nrows()") : (void)0)
;
16584 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16584
, "n_p==pxsec.ncols()") : (void)0)
;
16585
16586 // Loop over pressure/temperature grid:
16587 for ( Index i=0; i<n_p; ++i )
16588 {
16589 //cout << "vmr[" << i << "]= " << vmr[i] << "\n";
16590 // Loop over frequency grid:
16591 for ( Index s=0; s<n_f; ++s )
16592 {
16593 // The second N2-VMR will be multiplied at the stage of absorption
16594 // calculation: abs = vmr * pxsec.
16595 pxsec(s,i) += C * // strength [1/(m*Hz²Pa²)]
16596 pow( ((Numeric)300.00/abs_t[i]), xt ) * // T dependence [1]
16597 pow( f_grid[s], xf ) * // f dependence [Hz^xt]
16598 pow( abs_p[i], xp ) * // p dependence [Pa^xp]
16599 pow( vmr[i], (xp-(Numeric)1.) ); // last N2-VMR at the stage
16600 // of absorption calculation
16601 }
16602 }
16603}
16604
16605
16606
16607
16608
16609// ############################################################################
16610// ############################## CARBON DIOXIDE MODELS #######################
16611// ############################################################################
16612
16613// ############################################################################
16614//! Rosenkranz_CO2_self_continuum
16615/*!
16616 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16617 CO2-CO2-continuum according to Rosenkranz, 1993 [1/m]
16618 \param Cin continuum strength [1/m * 1/(Hz*Pa)²]
16619 \param xin continuum temperature exponent [1]
16620 \param model allows user defined input parameter set
16621 (Cin and xin)<br> or choice of
16622 pre-defined parameters of specific models (see note below).
16623 \param f_grid predefined frequency grid [Hz]
16624 \param abs_p predefined pressure grid [Pa]
16625 \param abs_t predefined temperature grid [K]
16626 \param vmr CO2 volume mixing ratio [1]
16627
16628 \note Except for model 'user' the input parameters Cin and xin
16629 are neglected (model dominates over parameters).<br>
16630 Allowed models: 'Rosenkranz' and 'user'.
16631 See the user guide for detailed explanations.
16632
16633 \remark Reference: P. W. Rosenkranz, Chapter 2, pp 74, pp 74, in M. A. Janssen, <br>
16634 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
16635 John Wiley & Sons, Inc., 1993.
16636
16637 \author Thomas Kuhn
16638 \date 2001-11-05
16639 */
16640
16641void Rosenkranz_CO2_self_continuum (MatrixView pxsec,
16642 const Numeric Cin,
16643 const Numeric xin,
16644 const String& model,
16645 ConstVectorView f_grid,
16646 ConstVectorView abs_p,
16647 ConstVectorView abs_t,
16648 ConstVectorView vmr,
16649 const Verbosity& verbosity)
16650{
16651 CREATE_OUT3ArtsOut3 out3(verbosity);
16652
16653 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
16654 // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
16655 // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
16656 const Numeric C_PWR = 7.43e-37; // [ 1/(Pa²*Hz²*m) ]
16657 const Numeric x_PWR = 5.08; // [ 1 ]
16658 // ---------------------------------------------------------------------------------------
16659
16660 // select the parameter set (!!model dominates values!!):
16661 Numeric C, x;
16662 if ( model == "Rosenkranz" )
16663 {
16664 C = C_PWR;
16665 x = x_PWR;
16666 }
16667 else if ( model == "user" )
16668 {
16669 C = Cin;
16670 x = xin;
16671 }
16672 else
16673 {
16674 ostringstream os;
16675 os << "CO2-SelfContPWR93 : ERROR! Wrong model values given.\n"
16676 << "allowed models are: 'Rosenkranz', 'user'" << "\n";
16677 throw runtime_error(os.str());
16678 }
16679
16680 out3 << "CO2-SelfContPWR93: (model=" << model << ") parameter values in use:\n"
16681 << " C = " << C << "\n"
16682 << " x = " << x << "\n";
16683
16684 const Index n_p = abs_p.nelem(); // Number of pressure levels
16685 const Index n_f = f_grid.nelem(); // Number of frequencies
16686
16687 // Check that dimensions of abs_p, abs_t, and vmr agree:
16688 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16688
, "n_p==abs_t.nelem()") : (void)0)
;
16689 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16689
, "n_p==vmr.nelem()") : (void)0)
;
16690
16691 // Check that dimensions of pxsec are consistent with n_f
16692 // and n_p. It should be [n_f,n_p]:
16693 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16693
, "n_f==pxsec.nrows()") : (void)0)
;
16694 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16694
, "n_p==pxsec.ncols()") : (void)0)
;
16695
16696 // Loop over pressure/temperature grid:
16697 for ( Index i=0; i<n_p; ++i )
16698 {
16699 // Dummy scalar holds everything except the quadratic frequency dependence.
16700 // The second vmr of CO2 will be multiplied at the stage of absorption
16701 // calculation: abs = vmr * pxsec.
16702 Numeric dummy =
16703 C * pow( (Numeric)300./abs_t[i], x ) * pow( abs_p[i], (Numeric)2. ) * vmr[i];
16704
16705 // Loop over frequency grid:
16706 for ( Index s=0; s<n_f; ++s )
16707 {
16708 pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. );
16709 }
16710 }
16711}
16712
16713// ############################################################################
16714//! Rosenkranz_CO2_foreign_continuum
16715/*!
16716 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16717 CO2-N2-continuum according to Rosenkranz, 1993 [1/m]
16718 \param Cin continuum strength [1/m * 1/(Hz*Pa)²]
16719 \param xin continuum temperature exponent [1]
16720 \param model allows user defined input parameter set
16721 (Cin and xin)<br> or choice of
16722 pre-defined parameters of specific models (see note below).
16723 \param f_grid predefined frequency grid [Hz]
16724 \param abs_p predefined pressure grid [Pa]
16725 \param abs_t predefined temperature grid [K]
16726 \param abs_n2 N2 volume mixing ratio profile [1]
16727 \param vmr CO2 volume mixing ratio profile [1]
16728
16729 \note Except for model 'user' the input parameters Cin and xin
16730 are neglected (model dominates over parameters).<br>
16731 Allowed models: 'Rosenkranz' and 'user'.
16732 See the user guide for detailed explanations.
16733
16734 \remark Reference: P. W. Rosenkranz, Chapter 2, pp 74, in M. A. Janssen, <br>
16735 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
16736 John Wiley & Sons, Inc., 1993.
16737
16738 \author Thomas Kuhn
16739 \date 2001-11-05
16740 */
16741
16742void Rosenkranz_CO2_foreign_continuum (MatrixView pxsec,
16743 const Numeric Cin,
16744 const Numeric xin,
16745 const String& model,
16746 ConstVectorView f_grid,
16747 ConstVectorView abs_p,
16748 ConstVectorView abs_t,
16749 ConstVectorView abs_n2,
16750 ConstVectorView vmr _U___attribute((unused)),
16751 const Verbosity& verbosity)
16752{
16753 CREATE_OUT3ArtsOut3 out3(verbosity);
16754
16755 // --------- STANDARD MODEL PARAMETERS ---------------------------------------------------
16756 // "Atmospheric Remote Sensing by Microwave Radiometry", John Wiley & Sons, Inc., 1993
16757 const Numeric C_PWR = 2.71e-37; // default: 2.71*10^-37 1/(Pa²*Hz²*m)
16758 const Numeric x_PWR = 4.7; // default: 4.7
16759 // ---------------------------------------------------------------------------------------
16760
16761 // select the parameter set (!!model dominates values!!):
16762 Numeric C, x;
16763 if ( model == "Rosenkranz" )
16764 {
16765 C = C_PWR;
16766 x = x_PWR;
16767 }
16768 else if ( model == "user" )
16769 {
16770 C = Cin;
16771 x = xin;
16772 }
16773 else
16774 {
16775 ostringstream os;
16776 os << "CO2-ForeignContPWR93: ERROR! Wrong model values given.\n"
16777 << "allowed models are: 'Rosenkranz', 'user'" << "\n";
16778 throw runtime_error(os.str());
16779 }
16780
16781 out3 << "CO2-ForeignContPWR93: (model=" << model << ") parameter values in use:\n"
16782 << " C = " << C << "\n"
16783 << " x = " << x << "\n";
16784
16785 const Index n_p = abs_p.nelem(); // Number of pressure levels
16786 const Index n_f = f_grid.nelem(); // Number of frequencies
16787
16788 // Check that dimensions of abs_p, abs_t, and vmr agree:
16789 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16789
, "n_p==abs_t.nelem()") : (void)0)
;
16790 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16790
, "n_p==vmr.nelem()") : (void)0)
;
16791
16792 // Check that dimensions of pxsec are consistent with n_f
16793 // and n_p. It should be [n_f,n_p]:
16794 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16794
, "n_f==pxsec.nrows()") : (void)0)
;
16795 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16795
, "n_p==pxsec.ncols()") : (void)0)
;
16796
16797 // Loop pressure/temperature:
16798 for ( Index i=0; i<n_p; ++i )
16799 {
16800 // Dummy scalar holds everything except the quadratic frequency dependence.
16801 // The vmr of CO2 will be multiplied at the stage of absorption
16802 // calculation: abs = vmr * pxsec.
16803 Numeric dummy = C * pow( (Numeric)300./abs_t[i], x ) * abs_p[i] * abs_p[i] * abs_n2[i];
16804
16805 // Loop frequency:
16806 for ( Index s=0; s<n_f; ++s )
16807 {
16808 pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. );
16809 }
16810 }
16811}
16812
16813// ############################################################################
16814//! Ho66_CO2_self_continuum
16815/*!
16816 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16817 CO2-CO2-continuum according to Ho et al 1966 [1/m]
16818 \param Cin continuum strength [1/m * 1/(Hz*Pa)²]
16819 \param xin continuum temperature exponent [1]
16820 \param model allows user defined input parameter set
16821 (Cin and xin)<br> or choice of
16822 pre-defined parameters of specific models (see note below).
16823 \param f_grid predefined frequency grid [Hz]
16824 \param abs_p predefined pressure grid [Pa]
16825 \param abs_t predefined temperature grid [K]
16826 \param vmr CO2 volume mixing ratio [1]
16827
16828 \note Except for model 'user' the input parameters Cin and xin
16829 are neglected (model dominates over parameters).<br>
16830 Allowed models: 'Ho66' and 'user'.
16831 See the user guide for detailed explanations.
16832
16833 \remark Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of
16834 microwave absorption in models of the atmosphere of Venus", JGR, 1966.
16835
16836 \author Patrick Eriksson (mainly by copying Thomas PWR function)
16837 \date 2013-10-15
16838 */
16839
16840void Ho66_CO2_self_continuum (MatrixView pxsec,
16841 const Numeric Cin,
16842 const Numeric xin,
16843 const String& model,
16844 ConstVectorView f_grid,
16845 ConstVectorView abs_p,
16846 ConstVectorView abs_t,
16847 ConstVectorView vmr,
16848 const Verbosity& verbosity)
16849{
16850 CREATE_OUT3ArtsOut3 out3(verbosity);
16851
16852 // --------- STANDARD MODEL PARAMETERS --------------------------------------
16853 // Values (after conversion for C) from abstract of Ho66:
16854 const Numeric C_Ho66 = 1.70e-36; // [ 1/(Pa²*Hz²*m) ]
16855 const Numeric x_Ho66 = 5; // [ 1 ]
16856 // --------------------------------------------------------------------------
16857
16858 // select the parameter set (!!model dominates values!!):
16859 Numeric C, x;
16860 if ( model == "Ho66" )
16861 {
16862 C = C_Ho66;
16863 x = x_Ho66;
16864 }
16865 else if ( model == "user" )
16866 {
16867 C = Cin;
16868 x = xin;
16869 }
16870 else
16871 {
16872 ostringstream os;
16873 os << "CO2-SelfContHo66 : ERROR! Wrong model values given.\n"
16874 << "allowed models are: 'Ho66', 'user'" << "\n";
16875 throw runtime_error(os.str());
16876 }
16877
16878 out3 << "CO2-SelfContHo66: (model=" << model
16879 << ") parameter values in use:\n" << " C = " << C << "\n"
16880 << " x = " << x << "\n";
16881
16882 const Index n_p = abs_p.nelem(); // Number of pressure levels
16883 const Index n_f = f_grid.nelem(); // Number of frequencies
16884
16885 // Check that dimensions of abs_p, abs_t, and vmr agree:
16886 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16886
, "n_p==abs_t.nelem()") : (void)0)
;
16887 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16887
, "n_p==vmr.nelem()") : (void)0)
;
16888
16889 // Check that dimensions of pxsec are consistent with n_f
16890 // and n_p. It should be [n_f,n_p]:
16891 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16891
, "n_f==pxsec.nrows()") : (void)0)
;
16892 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16892
, "n_p==pxsec.ncols()") : (void)0)
;
16893
16894 // Loop over pressure/temperature grid:
16895 for ( Index i=0; i<n_p; ++i )
16896 {
16897 // Dummy scalar holds everything except the quadratic frequency
16898 // dependence. The second vmr of CO2 will be multiplied at the stage of
16899 // absorption calculation: abs = vmr * pxsec.
16900
16901 Numeric dummy = C * pow( (Numeric)273./abs_t[i], x ) *
16902 pow( abs_p[i], (Numeric)2. ) * vmr[i];
16903
16904 // Loop over frequency grid:
16905 for ( Index s=0; s<n_f; ++s )
16906 { pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. ); }
16907 }
16908}
16909
16910// ############################################################################
16911//! Ho66_CO2_foreign_continuum
16912/*!
16913 \param[out] pxsec cross section (absorption/volume mixing ratio) of
16914 CO2-CO2-continuum according to Ho et al 1966 [1/m]
16915 \param Cin continuum strength [1/m * 1/(Hz*Pa)²]
16916 \param xin continuum temperature exponent [1]
16917 \param model allows user defined input parameter set
16918 (Cin and xin)<br> or choice of
16919 pre-defined parameters of specific models (see note below).
16920 \param f_grid predefined frequency grid [Hz]
16921 \param abs_p predefined pressure grid [Pa]
16922 \param abs_t predefined temperature grid [K]
16923 \param abs_n2 N2 volume mixing ratio profile [1]
16924 \param vmr CO2 volume mixing ratio profile [1]
16925
16926 \note Except for model 'user' the input parameters Cin and xin
16927 are neglected (model dominates over parameters).<br>
16928 Allowed models: 'Ho66' and 'user'.
16929 See the user guide for detailed explanations.
16930
16931 \remark Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of
16932 microwave absorption in models of the atmosphere of Venus", JGR, 1966.
16933
16934 \author Patrick Eriksson (mainly by copying Thomas PWR function)
16935 \date 2013-10-15
16936*/
16937
16938void Ho66_CO2_foreign_continuum (MatrixView pxsec,
16939 const Numeric Cin,
16940 const Numeric xin,
16941 const String& model,
16942 ConstVectorView f_grid,
16943 ConstVectorView abs_p,
16944 ConstVectorView abs_t,
16945 ConstVectorView abs_n2,
16946 ConstVectorView vmr _U___attribute((unused)),
16947 const Verbosity& verbosity)
16948{
16949 CREATE_OUT3ArtsOut3 out3(verbosity);
16950
16951 // --------- STANDARD MODEL PARAMETERS --------------------------------------
16952 // Values (after conversion for C) from abstract of Ho66:
16953 const Numeric C_Ho66 = 4.23e-37; // [ 1/(Pa²*Hz²*m) ]
16954 const Numeric x_Ho66 = 5; // [ 1 ]
16955 // --------------------------------------------------------------------------
16956
16957 // select the parameter set (!!model dominates values!!):
16958 Numeric C, x;
16959 if ( model == "Ho66" )
16960 {
16961 C = C_Ho66;
16962 x = x_Ho66;
16963 }
16964 else if ( model == "user" )
16965 {
16966 C = Cin;
16967 x = xin;
16968 }
16969 else
16970 {
16971 ostringstream os;
16972 os << "CO2-ForeignContHo66: ERROR! Wrong model values given.\n"
16973 << "allowed models are: 'Ho66', 'user'" << "\n";
16974 throw runtime_error(os.str());
16975 }
16976
16977 out3 << "CO2-ForeignContHo66: (model=" << model
16978 << ") parameter values in use:\n" << " C = " << C << "\n"
16979 << " x = " << x << "\n";
16980
16981 const Index n_p = abs_p.nelem(); // Number of pressure levels
16982 const Index n_f = f_grid.nelem(); // Number of frequencies
16983
16984 // Check that dimensions of abs_p, abs_t, and vmr agree:
16985 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16985
, "n_p==abs_t.nelem()") : (void)0)
;
16986 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16986
, "n_p==vmr.nelem()") : (void)0)
;
16987
16988 // Check that dimensions of pxsec are consistent with n_f
16989 // and n_p. It should be [n_f,n_p]:
16990 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16990
, "n_f==pxsec.nrows()") : (void)0)
;
16991 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 16991
, "n_p==pxsec.ncols()") : (void)0)
;
16992
16993 // Loop pressure/temperature:
16994 for ( Index i=0; i<n_p; ++i )
16995 {
16996 // Dummy scalar holds everything except the quadratic frequency
16997 // dependence The vmr of CO2 will be multiplied at the stage of
16998 // absorption calculation: abs = vmr * pxsec.
16999 Numeric dummy = C * pow( (Numeric)273./abs_t[i], x ) *
17000 abs_p[i] * abs_p[i] * abs_n2[i];
17001
17002 // Loop frequency:
17003 for ( Index s=0; s<n_f; ++s )
17004 { pxsec(s,i) += dummy * pow( f_grid[s], (Numeric)2. ); }
17005 }
17006}
17007
17008
17009
17010
17011
17012
17013// ############################################################################
17014// ################################### CLOUD AND RAIN MODELS ##################
17015// ############################################################################
17016//! MPM93WaterDropletAbs
17017/*!
17018 \param[out] pxsec cross section (absorption/volume mixing ratio) of
17019 water clouds according to MPM93 [1/m]
17020 \param CCin scaling parameter of the calculated cross section [1]
17021 \param CGin scaling parameter of the first relaxation frequency
17022 (gamma_1, see page 3-6 in the reference) [1]
17023 \param CEin scaling parameter of the first permittivity component
17024 (epsilon_0, see page 3-6 in the reference) [1]
17025 \param model allows user defined input parameter
17026 (CCin, CGin, CEin)<br> or choice of
17027 pre-defined parameters of specific models (see note below).
17028 \param f_grid predefined frequency grid [Hz]
17029 \param abs_p predefined pressure grid [Pa]
17030 \param abs_t predefined temperature grid [K]
17031 \param vmr suspended water droplet density profile [kg/m³]
17032 (valid range (Tab.1 of reference): 0-0.005)
17033
17034 \note Except for model 'user' the input parameters CCin, CGin, and CEin
17035 are neglected (model dominates over parameters).<br>
17036 Allowed models: 'MPM93' and 'user'.
17037 See the user guide for detailed explanations.
17038
17039 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
17040 <i>Propagation modeling of moist air and suspended water/ice
17041 particles at frequencies below 1000 GHz</i>,<br>
17042 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
17043 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21.
17044
17045 \author Thomas Kuhn
17046 \date 2001-11-05
17047 */
17048void MPM93WaterDropletAbs (MatrixView pxsec,
17049 const Numeric CCin, // input parameter
17050 const Numeric CGin, // input parameter
17051 const Numeric CEin, // input parameter
17052 const String& model, // model
17053 ConstVectorView f_grid, // frequency vector
17054 ConstVectorView abs_p, // pressure vector
17055 ConstVectorView abs_t, // temperature vector
17056 ConstVectorView vmr, // suspended water droplet density vector
17057 const Verbosity& )
17058{
17059 // --------- STANDARD MODEL PARAMETERS ------------------------------------------------
17060 // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
17061 // "Propagation modeling of moist air and suspended water/ice
17062 // particles at frequencies below 1000 GHz",
17063 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
17064 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
17065 const Numeric CC_MPM93 = 1.00000;
17066 const Numeric CG_MPM93 = 1.00000;
17067 const Numeric CE_MPM93 = 1.00000;
17068 // ------------------------------------------------------------------------------------
17069
17070
17071 // select the parameter set (!!model dominates values!!):
17072 Numeric CC, CG, CE;
17073 if ( model == "MPM93" )
17074 {
17075 CC = CC_MPM93;
17076 CG = CG_MPM93;
17077 CE = CE_MPM93;
17078 }
17079 else if ( model == "user" )
17080 {
17081 CC = CCin;
17082 CG = CGin;
17083 CE = CEin;
17084 }
17085 else
17086 {
17087 ostringstream os;
17088 os << "liquidcloud-MPM93: ERROR! Wrong model values given.\n"
17089 << "Valid models are: \"MPM93\" and \"user\"";
17090 throw runtime_error(os.str());
17091 }
17092
17093
17094 const Numeric m = 1.00e3; // specific weight of the droplet, fixed value: 1.00e3 kg/m3
17095 const Numeric low_lim_den = -LIQUID_AND_ICE_TREAT_AS_ZERO; // lower limit of suspended droplet particle density vector [kg/m3]
17096 const Numeric high_lim_den = 5.00e-3; // upper limit of suspended droplet particle density vector [kg/m3]
17097
17098 const Index n_p = abs_p.nelem(); // Number of pressure levels
17099 const Index n_f = f_grid.nelem(); // Number of frequencies
17100
17101 // Check that dimensions of abs_p, abs_t, and vmr agree:
17102 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17102
, "n_p==abs_t.nelem()") : (void)0)
;
17103 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17103
, "n_p==vmr.nelem()") : (void)0)
;
17104
17105 // Check that dimensions of pxsec are consistent with n_f
17106 // and n_p. It should be [n_f,n_p]:
17107 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17107
, "n_f==pxsec.nrows()") : (void)0)
;
17108 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17108
, "n_p==pxsec.ncols()") : (void)0)
;
17109
17110 // Loop pressure/temperature:
17111 for ( Index i=0; i<n_p; ++i )
17112 {
17113 // Check limits of suspended water droplet density ("vmr") [kg/m³]
17114 if( (vmr[i] < low_lim_den) || (vmr[i] > high_lim_den) )
17115 {
17116 ostringstream os;
17117 os << "ERROR in MPM93WaterDropletAbs:\n"
17118 << "Valid range is " << low_lim_den << "-" << low_lim_den << "kg/m3,\n"
17119 << "but found a value = " << vmr[i];
17120 throw runtime_error(os.str());
17121 }
17122
17123 else if( vmr[i] < LIQUID_AND_ICE_TREAT_AS_ZERO )
17124 {
17125 pxsec(joker,i) = 0;
17126 }
17127
17128 else
17129 {
17130 // relative inverse temperature [1]
17131 Numeric theta = 300.000 / abs_t[i];
17132 // relaxation frequencies [GHz]
17133 Numeric gamma1 = CG * 20.20 - 146.40*(theta-1.000) + 316.00*(theta-1.000)*(theta-1.000);
17134 // Numeric gamma1 = 20.1 * exp( 7.88 * theta ); // see Liebe et al. IJIMW, 1992, p667, Eq. (2b)
17135 Numeric gamma2 = 39.80 * gamma1;
17136 // static and high-frequency permittivities
17137 Numeric epsilon0 = CE * 103.30 * (theta-1.000) + 77.66;
17138 Numeric epsilon1 = 0.0671 * epsilon0;
17139 Numeric epsilon2 = 3.52;
17140
17141 // Loop frequency:
17142 for ( Index s=0; s<n_f; ++s )
17143 {
17144 // real part of the complex permittivity of water (double-debye model)
17145 Numeric Reepsilon = epsilon0 -
17146 pow((f_grid[s]*Hz_to_GHz),(Numeric)2.) *
17147 ( ((epsilon0-epsilon1)/
17148 (pow((f_grid[s]*Hz_to_GHz),(Numeric)2.)
17149 + pow(gamma1,(Numeric)2.))) +
17150 ((epsilon1-epsilon2)/
17151 (pow((f_grid[s]*Hz_to_GHz),(Numeric)2.)
17152 + pow(gamma2,(Numeric)2.))) );
17153 // imaginary part of the complex permittivity of water (double-debye model)
17154 Numeric Imepsilon = (f_grid[s]*Hz_to_GHz) *
17155 ( (gamma1*(epsilon0-epsilon1)/
17156 (pow((f_grid[s]*Hz_to_GHz),(Numeric)2.)
17157 + pow(gamma1,(Numeric)2.))) +
17158 (gamma2*(epsilon1-epsilon2)/
17159 (pow((f_grid[s]*Hz_to_GHz),(Numeric)2.)
17160 + pow(gamma2,(Numeric)2.))) );
17161 // the imaginary part of the complex refractivity of suspended liquid water particle [ppm]
17162 // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts,
17163 // a factor of 1.000e6 must be multiplied with the ratio (w/m):
17164 // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³)
17165 // arts: (w/m)_arts in (kg/m³)/(kg/m³)
17166 // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts
17167 // the factor of 1.0e6 is included below in pxsec calculation.
17168 Numeric ImNw = 1.500 / m *
17169 ( 3.000 * Imepsilon
17170 / ( pow((Reepsilon+(Numeric)2.000),(Numeric)2.)
17171 + pow(Imepsilon,(Numeric)2.) ) );
17172 // liquid water particle absorption cross section [1/m]
17173 // The vmr of H2O will be multiplied at the stage of absorption
17174 // calculation: abs = vmr * pxsec.
17175 // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
17176 pxsec(s,i) += CC * 1.000e6 * dB_km_to_1_m * 0.1820 * (f_grid[s]*Hz_to_GHz) * ImNw;
17177 }
17178 }
17179 }
17180}
17181
17182
17183//
17184// #################################################################################
17185//! ELL07WaterDropletAbs
17186/*!
17187 \param[out] pxsec cross section (absorption/volume mixing ratio) of
17188 water clouds according to ELL07 [1/m]
17189 \param model allows choice of
17190 pre-defined parameters of specific models (see note below).
17191 \param f_grid predefined frequency grid [Hz]
17192 \param abs_p predefined pressure grid [Pa]
17193 \param abs_t predefined temperature grid [K]
17194 \param vmr suspended water droplet density profile [kg/m³]
17195 (valid range (Tab.1 of MPM93): 0-0.005)
17196
17197 \note Allowed models: 'ELL07'.
17198 See the user guide for detailed explanations.
17199
17200 \remark Reference: W. J. Ellison, <br>
17201 <i>Permittivity of Pure Water, at Standard Atmospheric Pressure, over the
17202 Frequency Range 0-25 THz and Temperature Range 0-100C</i>,<br>
17203 J. Phys. Chem. Ref. Data, Vol. 36, No. 1, 2007
17204
17205 \author Stuart Fox
17206 \date 2015-06-03
17207 */
17208
17209void ELL07WaterDropletAbs (MatrixView pxsec,
17210 const String& model, // model
17211 ConstVectorView f_grid, // frequency vector
17212 ConstVectorView abs_p, // pressure vector
17213 ConstVectorView abs_t, // temperature vector
17214 ConstVectorView vmr, // suspended water droplet density vector
17215 const Verbosity& )
17216{
17217 if (model != "ELL07")
17218 {
17219 ostringstream os;
17220 os << "liquidcloud-ELL07: ERROR! Wrong model values given.\n"
17221 << "Valid models are: \"ELL07\"";
17222 throw runtime_error(os.str());
17223 }
17224
17225
17226 const Numeric m = 1.00e3; // specific weight of the droplet, fixed value: 1.00e3 kg/m3
17227 const Numeric low_lim_den = -LIQUID_AND_ICE_TREAT_AS_ZERO; // lower limit of suspended droplet particle density vector [kg/m3]
17228 const Numeric high_lim_den = 5.00e-3; // upper limit of suspended droplet particle density vector [kg/m3]
17229
17230 const Index n_p = abs_p.nelem(); // Number of pressure levels
17231 const Index n_f = f_grid.nelem(); // Number of frequencies
17232
17233 // ELL07 model parameters - table 2 in Ellison (2007)
17234 const Numeric a1=79.23882;
17235 const Numeric a2=3.815866;
17236 const Numeric a3=1.634967;
17237 const Numeric tc=133.1383;
17238 const Numeric b1=0.004300598;
17239 const Numeric b2=0.01117295;
17240 const Numeric b3=0.006841548;
17241 const Numeric c1=1.382264e-13;
17242 const Numeric c2=3.510354e-16;
17243 const Numeric c3=6.30035e-15;
17244 const Numeric d1=652.7648;
17245 const Numeric d2=1249.533;
17246 const Numeric d3=405.5169;
17247 const Numeric p0=0.8379692;
17248 const Numeric p1=-0.006118594;
17249 const Numeric p2=-0.000012936798;
17250 const Numeric p3=4235901000000.0;
17251 const Numeric p4=-14260880000.0;
17252 const Numeric p5=273815700.0;
17253 const Numeric p6=-1246943.0;
17254 const Numeric p7=9.618642e-14;
17255 const Numeric p8=1.795786e-16;
17256 const Numeric p9=-9.310017E-18;
17257 const Numeric p10=1.655473e-19;
17258 const Numeric p11=0.6165532;
17259 const Numeric p12=0.007238532;
17260 const Numeric p13=-0.00009523366;
17261 const Numeric p14=15983170000000.0;
17262 const Numeric p15=-74413570000.0;
17263 const Numeric p16=497448000.0;
17264 const Numeric p17=2.882476e-14;
17265 const Numeric p18=-3.142118e-16;
17266 const Numeric p19=3.528051e-18;
17267
17268 // Check that dimensions of abs_p, abs_t, and vmr agree:
17269 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17269
, "n_p==abs_t.nelem()") : (void)0)
;
17270 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17270
, "n_p==vmr.nelem()") : (void)0)
;
17271
17272 // Check that dimensions of pxsec are consistent with n_f
17273 // and n_p. It should be [n_f,n_p]:
17274 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17274
, "n_f==pxsec.nrows()") : (void)0)
;
17275 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17275
, "n_p==pxsec.ncols()") : (void)0)
;
17276
17277 // Loop pressure/temperature:
17278 for ( Index i=0; i<n_p; ++i )
17279 {
17280 // Check limits of suspended water droplet density ("vmr") [kg/m³]
17281 if( (vmr[i] < low_lim_den) || (vmr[i] > high_lim_den) )
17282 {
17283 ostringstream os;
17284 os << "ERROR in ELL07WaterDropletAbs:\n"
17285 << "Valid range is " << low_lim_den << "-" << low_lim_den << "kg/m3,\n"
17286 << "but found a value = " << vmr[i];
17287 throw runtime_error(os.str());
17288 }
17289
17290 else if( vmr[i] < LIQUID_AND_ICE_TREAT_AS_ZERO )
17291 {
17292 pxsec(joker,i) = 0;
17293 }
17294
17295 else
17296 {
17297 // Temperature in celsius
17298 Numeric t_cels = abs_t[i]-273.15;
17299 // static permittivity
17300 Numeric epsilon_s = 87.9144-0.404399*t_cels-9.58726e-4*pow(t_cels,(Numeric)2.) -
17301 1.32802e-6*pow(t_cels,(Numeric)3.);
17302 // Model parameters
17303 Numeric delta1=a1*exp(-b1*t_cels);
17304 Numeric delta2=a2*exp(-b2*t_cels);
17305 Numeric delta3=a3*exp(-b3*t_cels);
17306 Numeric tau1=c1*exp(d1/(t_cels+tc));
17307 Numeric tau2=c2*exp(d2/(t_cels+tc));
17308 Numeric tau3=c3*exp(d3/(t_cels+tc));
17309 Numeric delta4=p0 + p1*t_cels + p2*pow(t_cels, (Numeric)2.);
17310 Numeric f0=p3 + p4*t_cels + p5*pow(t_cels, (Numeric)2.) + p6*pow(t_cels, (Numeric)3.);
17311 Numeric tau4=p7+p8*t_cels + p9*pow(t_cels, (Numeric)2.) + p10*pow(t_cels, (Numeric)3.);
17312 Numeric delta5=p11 + p12*t_cels + p13*pow(t_cels, (Numeric)2.);
17313 Numeric f1=p14 + p15*t_cels + p16*pow(t_cels, (Numeric)2.);
17314 Numeric tau5=p17 + p18*t_cels + p19*pow(t_cels, (Numeric)2.);
17315
17316 // Loop frequency:
17317 for ( Index s=0; s<n_f; ++s )
17318 {
17319 // real part of the complex permittivity of water (triple-debye + 2 resonances)
17320 Numeric Reepsilon = epsilon_s - pow(((Numeric)2.*PI*f_grid[s]),(Numeric)2.)*
17321 (pow(tau1,(Numeric)2.)*delta1/((Numeric)1.+pow((Numeric)2.*PI*f_grid[s]*tau1, (Numeric)2.)) +
17322 pow(tau2,(Numeric)2.)*delta2/((Numeric)1.+pow((Numeric)2.*PI*f_grid[s]*tau2, (Numeric)2.)) +
17323 pow(tau3,(Numeric)2.)*delta3/((Numeric)1.+pow((Numeric)2.*PI*f_grid[s]*tau3, (Numeric)2.))) -
17324 pow((Numeric)2.*PI*tau4,(Numeric)2.)*delta4/(Numeric)2.*(f_grid[s]*(f0+f_grid[s]) /
17325 ((Numeric)1.+pow((Numeric)2.*PI*tau4*(f0+f_grid[s]),(Numeric)2.)) -
17326 f_grid[s]*(f0-f_grid[s]) /
17327 ((Numeric)1.+pow((Numeric)2.*PI*tau4*(f0-f_grid[s]),(Numeric)2.))) -
17328 pow((Numeric)2.*PI*tau5,(Numeric)2.)*delta5/(Numeric)2.*(f_grid[s]*(f1+f_grid[s]) /
17329 ((Numeric)1.+pow((Numeric)2.*PI*tau5*(f1+f_grid[s]),(Numeric)2.)) -
17330 f_grid[s]*(f1-f_grid[s]) /
17331 ((Numeric)1.+pow((Numeric)2.*PI*tau5*(f1-f_grid[s]),(Numeric)2.)));
17332 // imaginary part of the complex permittivity of water (triple-debye + 2 resonances)
17333 Numeric Imepsilon = 2*PI*f_grid[s]*(tau1*delta1/((Numeric)1.+pow((Numeric)2.*PI*f_grid[s]*tau1, (Numeric)2.)) +
17334 tau2*delta2/((Numeric)1.+pow((Numeric)2.*PI*f_grid[s]*tau2, (Numeric)2.)) +
17335 tau3*delta3/((Numeric)1.+pow((Numeric)2.*PI*f_grid[s]*tau3, (Numeric)2.))) +
17336 PI*f_grid[s]*tau4*delta4*((Numeric)1./((Numeric)1.+pow((Numeric)2.*PI*tau4*(f0+f_grid[s]),(Numeric)2.)) +
17337 (Numeric)1./((Numeric)1.+pow((Numeric)2.*PI*tau4*(f0-f_grid[s]),(Numeric)2.))) +
17338 PI*f_grid[s]*tau5*delta5*((Numeric)1./((Numeric)1.+pow((Numeric)2.*PI*tau5*(f1+f_grid[s]),(Numeric)2.)) +
17339 (Numeric)1./((Numeric)1.+pow((Numeric)2.*PI*tau5*(f1-f_grid[s]),(Numeric)2.)));
17340
17341 // the imaginary part of the complex refractivity of suspended liquid water particle [ppm]
17342 // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts,
17343 // a factor of 1.000e6 must be multiplied with the ratio (w/m):
17344 // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³)
17345 // arts: (w/m)_arts in (kg/m³)/(kg/m³)
17346 // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts
17347 // the factor of 1.0e6 is included below in pxsec calculation.
17348 Numeric ImNw = 1.500 / m *
17349 ( 3.000 * Imepsilon
17350 / ( pow((Reepsilon+(Numeric)2.000),(Numeric)2.)
17351 + pow(Imepsilon,(Numeric)2.) ) );
17352 // liquid water particle absorption cross section [1/m]
17353 // The vmr of H2O will be multiplied at the stage of absorption
17354 // calculation: abs = vmr * pxsec.
17355 // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
17356 pxsec(s,i) += 1.000e6 * dB_km_to_1_m * 0.1820 * (f_grid[s]*Hz_to_GHz) * ImNw;
17357 }
17358 }
17359 }
17360}
17361
17362
17363
17364//
17365// #################################################################################
17366//! MPM93IceCrystalAbs
17367/*!
17368 \param[out] pxsec cross section (absorption/volume mixing ratio) of
17369 ice clouds according to MPM93 [1/m]
17370 \param CCin scaling parameter of the calculated cross section [1]
17371 \param CAin scaling parameter of the permittivity function a
17372 (see page 3-6 in the reference) [1]
17373 \param CBin scaling parameter of the permittivity function b
17374 (see page 3-6 in the reference) [1]
17375 \param model allows user defined input parameter
17376 (CCin, CAin, CBin)<br> or choice of
17377 pre-defined parameters of specific models (see note below).
17378 \param f_grid predefined frequency grid [Hz]
17379 \param abs_p predefined pressure grid [Pa]
17380 \param abs_t predefined temperature grid [K]
17381 \param vmr suspended water droplet density profile [kg/m³]
17382 (valid range (Tab.1 of reference): 0-0.001)
17383
17384 \note Except for model 'user' the input parameters CCin, CAin, and CBin
17385 are neglected (model dominates over parameters).<br>
17386 Allowed models: 'MPM93' and 'user'.
17387 See the user guide for detailed explanations.
17388
17389 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
17390 <i>Propagation modeling of moist air and suspended water/ice
17391 particles at frequencies below 1000 GHz</i>,<br>
17392 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
17393 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21.
17394
17395 \author Thomas Kuhn
17396 \date 2001-11-05
17397 */
17398
17399void MPM93IceCrystalAbs (MatrixView pxsec,
17400 const Numeric CCin, // input parameter
17401 const Numeric CAin, // input parameter
17402 const Numeric CBin, // input parameter
17403 const String& model, // model
17404 ConstVectorView f_grid, // frequency vector
17405 ConstVectorView abs_p, // pressure vector
17406 ConstVectorView abs_t, // temperature vector
17407 ConstVectorView vmr, // suspended ice particle density vector,
17408 // valid range: 0-1.0e-3 kg/m³
17409 const Verbosity& )
17410{
17411 // --------- STANDARD MODEL PARAMETERS ------------------------------------------------
17412 // standard values for the MPM93 model (J. Liebe and G. A. Hufford and M. G. Cotton,
17413 // "Propagation modeling of moist air and suspended water/ice
17414 // particles at frequencies below 1000 GHz",
17415 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
17416 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21)
17417 const Numeric CC_MPM93 = 1.00000;
17418 const Numeric CA_MPM93 = 1.00000;
17419 const Numeric CB_MPM93 = 1.00000;
17420 // ------------------------------------------------------------------------------------
17421
17422 // select the parameter set (!!model dominates values!!):
17423 Numeric CC, CA, CB;
17424 if ( model == "MPM93" )
17425 {
17426 CC = CC_MPM93;
17427 CA = CA_MPM93;
17428 CB = CB_MPM93;
17429 }
17430 else if ( model == "user" )
17431 {
17432 CC = CCin;
17433 CA = CAin;
17434 CB = CBin;
17435 }
17436 else
17437 {
17438 ostringstream os;
17439 os << "icecloud-MPM93: ERROR! Wrong model values given.\n"
17440 << "Valid models are: \"MPM93\" and \"user\"";
17441 throw runtime_error(os.str());
17442 }
17443
17444 const Numeric m = 0.916e3; // specific weight of ice particles, fixed value: 0.916e3 kg/m³
17445 const Numeric low_lim_den = -LIQUID_AND_ICE_TREAT_AS_ZERO; // lower limit of suspended droplet particle density vector [kg/m3]
17446 const Numeric high_lim_den = 1.00e-3; // lower limit of suspended ice particle density vector [kg/m³]
17447
17448 const Index n_p = abs_p.nelem(); // Number of pressure levels
17449 const Index n_f = f_grid.nelem(); // Number of frequencies
17450
17451 // Check that dimensions of abs_p, abs_t, and vmr agree:
17452 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17452
, "n_p==abs_t.nelem()") : (void)0)
;
17453 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17453
, "n_p==vmr.nelem()") : (void)0)
;
17454
17455 // Check that dimensions of pxsec are consistent with n_f
17456 // and n_p. It should be [n_f,n_p]:
17457 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17457
, "n_f==pxsec.nrows()") : (void)0)
;
17458 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17458
, "n_p==pxsec.ncols()") : (void)0)
;
17459
17460
17461 // Loop pressure/temperature:
17462 for ( Index i=0; i<n_p; ++i )
17463 {
17464 // Check limits of suspended water droplet density ("vmr") [kg/m³]
17465 if( (vmr[i] < low_lim_den) || (vmr[i] > high_lim_den) )
17466 {
17467 ostringstream os;
17468 os << "ERROR in MPM93IceCrystalAbs:\n"
17469 << "Valid range is " << low_lim_den << "-" << low_lim_den << "kg/m3,\n"
17470 << "but found a value = " << vmr[i];
17471 throw runtime_error(os.str());
17472 }
17473
17474 else if( vmr[i] < LIQUID_AND_ICE_TREAT_AS_ZERO )
17475 {
17476 pxsec(joker,i) = 0;
17477 }
17478
17479 else
17480 {
17481 // relative inverse temperature [1]
17482 Numeric theta = 300.000 / abs_t[i];
17483 // inverse frequency T-dependency function [Hz]
17484 Numeric ai = CA * (62.000 * theta - 11.600) * exp(-22.100 * (theta-1.000)) * 1.000e-4;
17485 // linear frequency T-dependency function [1/Hz]
17486 Numeric bi = CB * 0.542e-6 *
17487 ( -24.17 + (116.79/theta)
17488 + pow((theta/(theta-(Numeric)0.9927)),(Numeric)2.) );
17489
17490 // Loop frequency:
17491 for ( Index s=0; s<n_f; ++s )
17492 {
17493 // real part of the complex permittivity of ice
17494 Numeric Reepsilon = 3.15;
17495 // imaginary part of the complex permittivity of water
17496 Numeric Imepsilon = ( ( ai/(f_grid[s]*Hz_to_GHz) ) +
17497 ( bi*(f_grid[s]*Hz_to_GHz) ) );
17498 // the imaginary part of the complex refractivity of suspended ice particles.
17499 // In MPM93 w is in g/m³ and m is in g/cm³. Because of the units used in arts,
17500 // a factor of 1.000e6 must be multiplied with the ratio (w/m):
17501 // MPM93: (w/m)_MPM93 in (g/m³)/(g/cm³)
17502 // arts: (w/m)_arts in (kg/m³)/(kg/m³)
17503 // =====> (w/m)_MPM93 = 1.0e6 * (w/m)_arts
17504 // the factor of 1.0e6 is included below in pxsec calculation.
17505 Numeric ImNw = 1.500 / m *
17506 ( 3.000 * Imepsilon
17507 / ( pow((Reepsilon+(Numeric)2.000),(Numeric)2.)
17508 + pow(Imepsilon,(Numeric)2.) ) );
17509 // ice particle absorption cross section [1/m]
17510 // The vmr of H2O will be multiplied at the stage of absorption
17511 // calculation: abs = vmr * pxsec.
17512 // pxsec = abs/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
17513 pxsec(s,i) += CC * 1.000e6 * dB_km_to_1_m * 0.1820 * (f_grid[s]*Hz_to_GHz) * ImNw;
17514 }
17515 }
17516 }
17517}
17518
17519
17520//
17521// #################################################################################
17522//! MPM93RainExt
17523/*!
17524 \param[out] pxsec cross section (absorption/volume mixing ratio) of
17525 water clouds according to MPM93 [1/m]
17526 \param CEin scaling parameter of the calculated cross section [1]
17527 \param CAin scaling parameter of the factor a_rain [1]
17528 \param CBin scaling parameter of the exponent b_rain [1]
17529 \param model allows user defined input parameter
17530 (CEin, CAin, CBin)<br> or choice of
17531 pre-defined parameters of specific models (see note below).
17532 \param f_grid predefined frequency grid [Hz]
17533 \param abs_p predefined pressure grid [Pa]
17534 \param abs_t predefined temperature grid [K]
17535 \param vmr rain rate vector (i.e. vertical profile) [kg/m2/s]
17536 (valid range: 0-0.42)
17537
17538 \note Except for model 'user' the input parameters CEin, CAin, and CBin
17539 are neglected (model dominates over parameters).<br>
17540 Allowed models: 'MPM93' and 'user'.
17541 See the user guide for detailed explanations.
17542
17543 \remark Reference: R. L. Olsen and D.V. Rogers and D. B. Hodge,<br>
17544 <i> The aR^b relation in the calculation of rain attenuation</i>,<br>
17545 IEEE Trans. Antennas Propagat., vol. AP-26, pp. 318-329, 1978.
17546
17547 \author Christian Melsheimer
17548 \date 2003-22-05
17549 */
17550
17551void MPM93RainExt (MatrixView pxsec,
17552 const Numeric CEin, // input parameter
17553 const Numeric CAin, // input parameter
17554 const Numeric CBin, // input parameter
17555 const String& model, // model
17556 ConstVectorView f_grid, // frequency vector
17557 ConstVectorView abs_p, // pressure vector
17558 ConstVectorView abs_t _U___attribute((unused)), // temperature vector
17559 ConstVectorView vmr, // rain rate profile [kg/m2/s]
17560 const Verbosity& )
17561{
17562 // --------- STANDARD MODEL PARAMETERS ------------------------------------------------
17563 // standard values for the MPM93 model based on Olsen, R.L.,
17564 // D.V. Rogers, and D. B. Hodge, "The aR^b relation in the
17565 // calculation of rain attenuation", IEEE Trans. Antennas Propagat.,
17566 // vol. AP-26, pp. 318-329, 1978,
17567 const Numeric CE_MPM93 = 1.00000;
17568 const Numeric CA_MPM93 = 1.00000;
17569 const Numeric CB_MPM93 = 1.00000;
17570 // ------------------------------------------------------------------------------------
17571
17572
17573 // select the parameter set (!!model dominates values!!):
17574 Numeric CE, CA, CB;
17575 if ( model == "MPM93" )
17576 {
17577 CE = CE_MPM93;
17578 CA = CA_MPM93;
17579 CB = CB_MPM93;
17580 }
17581 else if ( model == "user" )
17582 {
17583 CE = CEin;
17584 CA = CAin;
17585 CB = CBin;
17586 }
17587 else
17588 {
17589 ostringstream os;
17590 os << "rain-MPM93: ERROR! Wrong model values given.\n"
17591 << "Valid models are: \"MPM93\" and \"user\"";
17592 throw runtime_error(os.str());
17593 }
17594 // ---------------------------------------------------------------------------------------
17595
17596 // conversion factor to convert input SI-units [kg/m2/s] to [mm/h]
17597 const Numeric convfac=3.6e6/DENSITY_OF_WATER;
17598
17599 const Numeric low_lim_rr = 0.000; // lower limit of allowed rain rate [mm/h]
17600 const Numeric high_lim_rr = 150.000; // upper limit of allowed rain rate [mm/h]
17601
17602 const Index n_p = abs_p.nelem(); // Number of pressure levels
17603 const Index n_f = f_grid.nelem(); // Number of frequencies
17604
17605 // Check that dimensions of abs_p, abs_t, and vmr agree:
17606 assert ( n_p==abs_t.nelem() )(__builtin_expect(!(n_p==abs_t.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17606
, "n_p==abs_t.nelem()") : (void)0)
;
17607 assert ( n_p==vmr.nelem() )(__builtin_expect(!(n_p==vmr.nelem()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17607
, "n_p==vmr.nelem()") : (void)0)
;
17608
17609 // Check that dimensions of pxsec are consistent with n_f
17610 // and n_p. It should be [n_f,n_p]:
17611 assert ( n_f==pxsec.nrows() )(__builtin_expect(!(n_f==pxsec.nrows()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17611
, "n_f==pxsec.nrows()") : (void)0)
;
17612 assert ( n_p==pxsec.ncols() )(__builtin_expect(!(n_p==pxsec.ncols()), 0) ? __assert_rtn(__func__
, "/Users/u237002/Dropbox/Hacking/sat/arts/src/continua.cc", 17612
, "n_p==pxsec.ncols()") : (void)0)
;
17613
17614 // Loop pressure/temperature:
17615 for ( Index i=0; i<n_p; ++i )
17616 {
17617 // Extinction by rain is parameterized as:
17618 // ext_rain = a_rain * rr ^ b_rain
17619 // a_rain and b_rain each depend on frequency by power laws:
17620 // a_rain = Ga * freq ^ Ea
17621 // b_rain = Gb * freq ^ Eb
17622 Numeric Ga = 0.;
17623 Numeric Ea = 0.;
17624 Numeric Gb = 0.;
17625 Numeric Eb = 0.;
17626 // FIXME Numeric a_rain;
17627 // FIXME Numeric b_rain;
17628 // FIXME Numeric ext_rain;
17629
17630 const Numeric vmri = vmr[i] * convfac;
17631
17632 // Check limits of rain rate ("vmr") [mm/h]
17633 if ( vmr[i]==0. )
17634 pxsec(joker,i) += 0.;
17635
17636 else if ( (vmri >= low_lim_rr) && (vmri < high_lim_rr) )
17637 {
17638 // Loop frequency:
17639 for ( Index s=0; s<n_f; ++s )
17640 {
17641 // for rain rate < 25 mm/h, take parameters from Olsen et al.'s
17642 // own power law fit to their Laws-Parsons-Low data;
17643 // for rain rate > 25 mm/h, take C. Melsheimer's power law fit
17644 // to Olsen et al.'s Laws-Parson-High data
17645 if ( vmri <= 25 )
17646 {
17647 // power law coeff. Ga and exponent Ea for a, piecewise:
17648 if ( f_grid[s] <= 2.9e9 )
17649 {
17650 Ga = 6.39e-5;
17651 Ea = 2.03;
17652 }
17653 else if ( f_grid[s] <= 54.0e9 )
17654 {
17655 Ga = 4.21e-5;
17656 Ea = 2.42;
17657 }
17658 else if ( f_grid[s] <= 180e9 )
17659 {
17660 Ga = 4.09e-2;
17661 Ea = 0.699;
17662 }
17663 else if ( f_grid[s] <= 1000e9 )
17664 {
17665 Ga = 3.38;
17666 Ea = -0.151;
17667 }
17668 else
17669 {
17670 ostringstream os;
17671 os << "ERROR in MPM93RainExt:\n"
17672 << " frequency (valid range 0-1000 GHz):"
17673 << f_grid[s]*Hz_to_GHz << "\n"
17674 << " ==> no calculation performed!\n";
17675 throw runtime_error(os.str());
17676 }
17677 // power law coeff. Gb and exponent Eb for b, piecewise:
17678 if ( f_grid[s] <= 8.5e9 )
17679 {
17680 Gb = 0.851;
17681 Eb = 0.158;
17682 }
17683 else if ( f_grid[s] <= 25.0e9 )
17684 {
17685 Gb = 1.41;
17686 Eb = -0.0779;
17687 }
17688 else if ( f_grid[s] <= 164.0e9 )
17689 {
17690 Gb = 2.63;
17691 Eb = -0.272;
17692 }
17693 else if ( f_grid[s] <= 1000e9 )
17694 {
17695 Gb = 0.616;
17696 Eb = 0.0126;
17697 }
17698 else
17699 {
17700 ostringstream os;
17701 os << "ERROR in MPM93RainExt:\n"
17702 << " frequency (valid range 0-1000 GHz):"
17703 << f_grid[s]*Hz_to_GHz << "\n"
17704 << " ==> no calculation performed!\n";
17705 throw runtime_error(os.str());
17706 }
17707
17708 }
17709 else if (vmri > 25)
17710 {
17711 // power law coeff. Ga and exponent Ea for a, piecewise:
17712 if ( f_grid[s] <= 4.9e9 )
17713 {
17714 Ga = 5.30e-5;
17715 Ea = 1.87;
17716 }
17717 else if ( f_grid[s] <= 10.7e9 )
17718 {
17719 Ga = 5.03e-6;
17720 Ea = 3.35;
17721 }
17722 else if ( f_grid[s] <= 40.1e9 )
17723 {
17724 Ga = 2.53e-5;
17725 Ea = 2.67;
17726 }
17727 else if ( f_grid[s] <= 59.1e9 )
17728 {
17729 Ga = 3.58e-3;
17730 Ea = 1.33;
17731 }
17732 else if ( f_grid[s] <= 100e9 )
17733 {
17734 Ga = 0.143;
17735 Ea = 0.422;
17736 }
17737 else
17738 {
17739 ostringstream os;
17740 os << "ERROR in MPM93RainExt:\n"
17741 << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):"
17742 << f_grid[s]*Hz_to_GHz << "\n"
17743 << " ==> no calculation performed!\n";
17744 throw runtime_error(os.str());
17745 }
17746 // power law coeff. Gb and exponent Eb for b, piecewise:
17747 if ( f_grid[s] <= 6.2e9 )
17748 {
17749 Gb = 0.911;
17750 Eb = 0.190;
17751 }
17752 else if ( f_grid[s] <= 23.8e9 )
17753 {
17754 Gb = 1.71;
17755 Eb = -0.156;
17756 }
17757 else if ( f_grid[s] <= 48.4e9 )
17758 {
17759 Gb = 3.08;
17760 Eb = -0.342;
17761 }
17762 else if ( f_grid[s] <= 68.2e9 )
17763 {
17764 Gb = 1.28;
17765 Eb = -0.116;
17766 }
17767 else if ( f_grid[s] <= 100e9 )
17768 {
17769 Gb = 0.932;
17770 Eb = -0.0408;
17771 }
17772 else
17773 {
17774 ostringstream os;
17775 os << "ERROR in MPM93RainExt:\n"
17776 << " frequency (valid range for rain rate > 25mm/h: 0-100 GHz):"
17777 << f_grid[s]*Hz_to_GHz << "\n"
17778 << " ==> no calculation performed!\n";
17779 throw runtime_error(os.str());
17780 }
17781 }
17782 //Factor a_rain
17783 Numeric a_rain = Ga * pow((f_grid[s]*Hz_to_GHz),Ea);
17784 //Factor b_rain
17785 Numeric b_rain = Gb * pow((f_grid[s]*Hz_to_GHz),Eb);
17786 // Extinction coefficient [dB/km], with scaling
17787 // parameters CA and CB
17788 Numeric ext_rain = CA * a_rain * pow(vmri,(CB*b_rain));
17789 // rain extinction cross section [1/m]
17790 // The vmr will be multiplied at the stage of extinction
17791 // calculation: ext = vmr * pxsec.
17792 // pxsec = ext/vmr [1/m] but MPM93 is in [dB/km] --> conversion necessary
17793 pxsec(s,i) += CE * dB_km_to_1_m * ext_rain / vmri;
17794 }
17795 } else
17796 {
17797 if ( (vmri < low_lim_rr) || (vmri > high_lim_rr) )
17798 {
17799 ostringstream os;
17800 os << "ERROR in MPM93RainExt:\n"
17801 << " rain rate (valid range 0.00-150.00 mm/h):" << vmr[i] << " kg/m2/s ("
17802 << vmri << " mm/h)\n"
17803 << " ==> no calculation performed!\n";
17804 throw runtime_error(os.str());
17805 }
17806 }
17807 }
17808
17809}
17810//
17811// #################################################################################
17812// ################################# HELP FUNCTIONS ################################
17813// #################################################################################
17814//
17815/**
17816
17817 \retval MPMLineShapeFunction H2O-line shape function value [1/Hz]
17818 \param gamma H2O-line width [Hz]
17819 \param fl H2O-line central frequency [Hz]
17820 \param f frequency position of calculation [Hz]
17821
17822 \note This function calculates the line shape function of Van Vleck and Weisskopf
17823 with the factor (f/fl)¹. for the MPM pseudo continuum line.
17824
17825 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
17826 <i>Propagation modeling of moist air and suspended water/ice
17827 particles at frequencies below 1000 GHz</i>,<br>
17828 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
17829 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
17830
17831 \author Thomas Kuhn
17832 \date 2001-11-05
17833 */
17834
17835Numeric MPMLineShapeFunction( const Numeric gamma,
17836 const Numeric fl,
17837 const Numeric f)
17838{
17839 /*
17840 this routine calculates the line shape function of Van Vleck and Weisskopf
17841 with the factor (f/f_o)¹. for the MPM pseudo continuum line.
17842
17843 creation TKS, 4.11.00
17844
17845 input: gamma [Hz] line width of line L
17846 fl [Hz] central frequency of line L
17847 f [Hz] frequency position of calculation
17848
17849 output: value [1/Hz] line shape function value at f for the line parameters
17850 of line L
17851
17852 */
17853
17854 double f_minus, f_plus ; /* internal variables */
17855 double value; /* return value */
17856
17857 // line at fl
17858 f_minus = 1.000 / ((f-fl)*(f-fl) + gamma*gamma);
17859
17860 // mirror line at -fl
17861 f_plus = 1.000 / ((f+fl)*(f+fl) + gamma*gamma);
17862
17863 // VVW line shape function value
17864 value = fabs(f/fl) * gamma * (f_minus + f_plus);
17865
17866 return value;
17867}
17868//
17869// #################################################################################
17870//
17871/**
17872
17873 \retval MPMLineShapeO2Function O2-line shape function value [1]
17874 \param gamma O2-line width [Hz]
17875 \param fl H2O-line central frequency of the [Hz]
17876 \param f frequency position of calculation [Hz]
17877 \param delta O2-line mixing parameter [1]
17878
17879 \note This function calculates the line shape function of Van Vleck and Weisskopf
17880 for O2 with line mixing.
17881
17882 \remark Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
17883 <i>Propagation modeling of moist air and suspended water/ice
17884 particles at frequencies below 1000 GHz</i>,<br>
17885 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
17886 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
17887
17888 \author Thomas Kuhn
17889 \date 2001-11-05
17890 */
17891
17892Numeric MPMLineShapeO2Function( const Numeric gamma,
17893 const Numeric fl,
17894 const Numeric f,
17895 const Numeric delta)
17896{
17897 /*
17898 this routine calculates the line shape function of Van Vleck and Weisskopf
17899 for O2 with line mixing.
17900
17901 creation TKS, 14.07.01
17902
17903 input: gamma [GHz] line width of line L
17904 fl [GHz] central frequency of line L
17905 f [GHz] frequency position of calculation
17906 delta [1] line mixing parameter
17907
17908 output: value [1] line shape function value at f for the line parameters
17909 of line L
17910
17911 */
17912
17913 double f_minus, f_plus ; /* internal variables */
17914 double value; /* return value */
17915
17916 // line at fl
17917 f_minus = (gamma - delta * (fl-f)) / ((fl-f)*(fl-f) + gamma*gamma);
17918
17919 // mirror line at -fl
17920 f_plus = (gamma - delta * (fl+f)) / ((fl+f)*(fl+f) + gamma*gamma);
17921
17922 // VVW line shape function value
17923 value = f * (f_minus + f_plus);
17924
17925 return value;
17926}
17927
17928
17929
17930//
17931// ############################################################################
17932// #################### CONTROL OF ADDITIONAL ABSORPTION MODEL ################
17933// ############################################################################
17934//
17935//
17936/**
17937 Calculates model absorption for one continuum or full model tag.
17938 Note, that only one tag can be taken at a time.
17939
17940 Calculated is the true absorption cross section, that means you have to
17941 multiply this with n*VMR in order to get the absorption
17942 coefficient in units of 1/m.
17943
17944 This is the type of xsec that is used all over ARTS, but not what
17945 is used by the internal continuum functions! (We have to divide
17946 the output of the internal continuum functions by the number
17947 density n.)
17948
17949 \retval xsec Cross section of one continuum tag,<br>
17950 xsec = alpha / (n*VMR) [m^2]. This is both input
17951 and output! (The function adds the continuum
17952 absorption cross section to the previous
17953 content of xsec.)
17954
17955 \param name The name of the model to calculate (derived from the tag name)
17956 \param parameters model parameters, as defined in method
17957 abs_cont_parameters.
17958 \param model model, related to model parameters
17959 \param f_grid Frequency grid [Hz]
17960 \param abs_p Pressure grid [Pa]
17961 \param abs_t Temperatures associated with the pressure grid, abs_p [K]
17962 \param abs_n2 Total volume mixing ratio profile of molecular nitrogen.<br>
17963 This will be needed only for the CO2 foreign continuum [1]<br>
17964 however one is forced to give this input [1]
17965 \param abs_h2o Total volume mixing ratio profile of water vapor.<br>
17966 This will be needed only for the oxygen continuum <br>
17967 however one is forced to give this input [1]
17968 \param vmr Volume mixing ratio profile of the actual species [1]
17969
17970 \author Stefan Buehler, Thomas Kuhn
17971 \date 2001-11-05
17972 */
17973void xsec_continuum_tag (MatrixView xsec,
17974 const String& name,
17975 ConstVectorView parameters,
17976 const String& model,
17977 ConstVectorView f_grid,
17978 ConstVectorView abs_p,
17979 ConstVectorView abs_t,
17980 ConstVectorView abs_n2,
17981 ConstVectorView abs_h2o,
17982 ConstVectorView abs_o2,
17983 ConstVectorView vmr,
17984 const Verbosity& verbosity)
17985{
17986 CREATE_OUT3ArtsOut3 out3(verbosity);
17987
17988 /* In the following all the possible tags are listed here and
17989 after a first consistency check about the input parameters the
17990 appropriate internal function is called,
17991
17992 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
17993 ATTENTION PLEASE UPDATE THIS COMMENT IF ANY CHANGES ARE MADE CONCERNING
17994 THE ASSOCIATED MODELS TO EACH TAG
17995 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
17996
17997 ----------------------------------------------------------------------------------------------------
17998 TAG VALID MODELS
17999 ----------------------------------------------------------------------------------------------------
18000 *CONTAGMODINFO* H2O-SelfContStandardType: Rosenkranz, user
18001 *CONTAGMODINFO* H2O-ForeignContStandardType: Rosenkranz, user
18002 *CONTAGMODINFO* H2O-ForeignContMaTippingType: MaTipping, user
18003 *CONTAGMODINFO* H2O-ContMPM93: MPM93, user
18004 *CONTAGMODINFO* H2O-MPM87: MPM87, MPM87Lines, MPM87Continuum, user
18005 *CONTAGMODINFO* H2O-MPM89: MPM89, MPM89Lines, MPM89Continuum, user
18006 *CONTAGMODINFO* H2O-MPM93: MPM93, MPM93Lines, MPM93Continuum, user
18007 *CONTAGMODINFO* H2O-PWR98: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
18008 *CONTAGMODINFO* H2O-CP98: CruzPol, CruzPolLine, CruzPolContinuum, user
18009 *CONTAGMODINFO* H2O-CKD24: CKD24, user
18010 *CONTAGMODINFO* O2-MPM85: MPM85, MPM85Lines, MPM85Continuum, MPM85NoCoupling, MPM85NoCutoff, user
18011 *CONTAGMODINFO* O2-MPM87: MPM87, MPM87Lines, MPM87Continuum, MPM87NoCoupling, MPM87NoCutoff, user
18012 *CONTAGMODINFO* O2-MPM89: MPM89, MPM89Lines, MPM89Continuum, MPM89NoCoupling, MPM89NoCutoff, user
18013 *CONTAGMODINFO* O2-MPM92: MPM92, MPM92Lines, MPM92Continuum, MPM92NoCoupling, MPM92NoCutoff, user
18014 *CONTAGMODINFO* O2-MPM93: MPM93, MPM93Lines, MPM93Continuum, MPM93NoCoupling, MPM92NoCutoff, user
18015 *CONTAGMODINFO* O2-PWR93: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
18016 *CONTAGMODINFO* O2-PWR88: Rosenkranz, RosenkranzLines, RosenkranzContinuum, user
18017 *CONTAGMODINFO* O2-SelfContMPM93: MPM93, user
18018 *CONTAGMODINFO* O2-SelfContPWR93: Rosenkranz, user
18019 *CONTAGMODINFO* O2-GenerealCont: Rosenkranz, MPM93, user
18020 *CONTAGMODINFO* N2-BFCIA86: BF86, user
18021 *CONTAGMODINFO* N2-SelfContMPM93: MPM93, user, MPM93Scale
18022 *CONTAGMODINFO* N2-SelfContPWR93: Rosenkranz, user
18023 *CONTAGMODINFO* N2-SelfContStandardType: Rosenkranz, user
18024 *CONTAGMODINFO* CO2-SelfContPWR93: Rosenkranz, user
18025 *CONTAGMODINFO* CO2-ForeignContPWR93: Rosenkranz, user
18026 *CONTAGMODINFO* liquidcloud-MPM93: MPM93, user
18027 *CONTAGMODINFO* liquidcloud-ELL07: ELL07
18028 *CONTAGMODINFO* icecloud-MPM93: MPM93, user
18029 *CONTAGMODINFO* rain-MPM93: MPM93, user
18030 ----------------------------------------------------------------------------------------------------
18031 */
18032
18033 // Set up a lokal variable pxsec for the pseudo cross sections, that
18034 // are used by the internal contiuum functions. It is important that
18035 // we also inititialize this to zero here, since the continuum
18036 // routines just add to this.
18037 // The dimensions of this are [n_frequencies,n_pressures].
18038 Matrix pxsec(xsec.nrows(),xsec.ncols(),0.0);
18039
18040 // ============= H2O continuum ========================================================
18041 if ( "H2O-SelfContStandardType"==name )
18042 {
18043 //
18044 // specific continuum parameters and units:
18045 // OUTPUT
18046 // pxsec : [1/m],
18047 // INPUT
18048 // parameters[0] : continuum coefficient (C_s) [1/m / (Hz²*Pa²)]
18049 // parameters[1] : temperature exponent (x_s) [1]
18050 // f_grid : [Hz]
18051 // abs_p : [Pa]
18052 // abs_t : [K]
18053 // vmr : [1]
18054 //
18055 const int Nparam = 2;
18056 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18057 {
18058 out3 << "Continuum model " << name << " is running with \n"
18059 << "user defined parameters according to model " << model << ".\n";
18060 Standard_H2O_self_continuum( pxsec,
18061 parameters[0],
18062 parameters[1],
18063 model,
18064 f_grid,
18065 abs_p,
18066 abs_t,
18067 vmr,
18068 verbosity );
18069 }
18070 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18071 {
18072 ostringstream os;
18073 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18074 << "parameters for the model " << model << ",\n"
18075 << "but you specified " << parameters.nelem() << " parameters.\n";
18076 throw runtime_error(os.str());
18077 }
18078 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18079 {
18080 out3 << "Continuum model " << name << " running with \n"
18081 << "the parameters for model " << model << ".\n";
18082 Standard_H2O_self_continuum( pxsec,
18083 0.00,
18084 0.00,
18085 model,
18086 f_grid,
18087 abs_p,
18088 abs_t,
18089 vmr,
18090 verbosity );
18091 }
18092 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18093 {
18094 ostringstream os;
18095 os << "ERROR: Continuum model " << name << " requires NO input\n"
18096 << "parameters for the model " << model << ",\n"
18097 << "but you specified " << parameters.nelem() << " parameters.\n"
18098 << "This ambiguity can not be solved by arts.\n"
18099 << "Please see the arts user guide chapter 3.\n";
18100 throw runtime_error(os.str());
18101 }
18102 }
18103 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18104 else if ( "H2O-ForeignContStandardType"==name )
18105 {
18106 //
18107 // specific continuum parameters units:
18108 // a) output
18109 // pxsec : [1/m],
18110 // b) input
18111 // parameters[0] : [1/m / (Hz²*Pa²)]
18112 // parameters[1] : [1]
18113 // f_grid : [Hz]
18114 // abs_p : [Pa]
18115 // abs_t : [K]
18116 // vmr : [1]
18117 //
18118 const int Nparam = 2;
18119 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18120 {
18121 out3 << "Continuum model " << name << " is running with \n"
18122 << "user defined parameters according to model " << model << ".\n";
18123 Standard_H2O_foreign_continuum( pxsec,
18124 parameters[0],
18125 parameters[1],
18126 model,
18127 f_grid,
18128 abs_p,
18129 abs_t,
18130 vmr,
18131 verbosity );
18132 }
18133 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18134 {
18135 ostringstream os;
18136 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18137 << "parameters for the model " << model << ",\n"
18138 << "but you specified " << parameters.nelem() << " parameters.\n";
18139 throw runtime_error(os.str());
18140 }
18141 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18142 {
18143 out3 << "Continuum model " << name << " running with \n"
18144 << "the parameters for model " << model << ".\n";
18145 Standard_H2O_foreign_continuum( pxsec,
18146 0.00,
18147 0.00,
18148 model,
18149 f_grid,
18150 abs_p,
18151 abs_t,
18152 vmr,
18153 verbosity );
18154 }
18155 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18156 {
18157 ostringstream os;
18158 os << "ERROR: Continuum model " << name << " requires NO input\n"
18159 << "parameters for the model " << model << ",\n"
18160 << "but you specified " << parameters.nelem() << " parameters.\n"
18161 << "This ambiguity can not be solved by arts.\n"
18162 << "Please see the arts user guide chapter 3.\n";
18163 throw runtime_error(os.str());
18164 }
18165 }
18166 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18167 else if ( "H2O-ForeignContMaTippingType"==name )
18168 {
18169 //
18170 // specific continuum parameters units:
18171 // a) output
18172 // pxsec : [1/m],
18173 // b) input
18174 // parameters[0] : [1/m / (Hz²*Pa²)]
18175 // parameters[1] : [1]
18176 // f_grid : [Hz]
18177 // abs_p : [Pa]
18178 // abs_t : [K]
18179 // vmr : [1]
18180 //
18181 const int Nparam = 2;
18182 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18183 {
18184 out3 << "Continuum model " << name << " is running with \n"
18185 << "user defined parameters according to model " << model << ".\n";
18186 MaTipping_H2O_foreign_continuum( pxsec,
18187 parameters[0],
18188 parameters[1],
18189 model,
18190 f_grid,
18191 abs_p,
18192 abs_t,
18193 vmr,
18194 verbosity );
18195 }
18196 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18197 {
18198 ostringstream os;
18199 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18200 << "parameters for the model " << model << ",\n"
18201 << "but you specified " << parameters.nelem() << " parameters.\n";
18202 throw runtime_error(os.str());
18203 }
18204 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18205 {
18206 out3 << "Continuum model " << name << " running with \n"
18207 << "the parameters for model " << model << ".\n";
18208 MaTipping_H2O_foreign_continuum( pxsec,
18209 0.00,
18210 0.00,
18211 model,
18212 f_grid,
18213 abs_p,
18214 abs_t,
18215 vmr,
18216 verbosity );
18217 }
18218 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18219 {
18220 ostringstream os;
18221 os << "ERROR: Continuum model " << name << " requires NO input\n"
18222 << "parameters for the model " << model << ",\n"
18223 << "but you specified " << parameters.nelem() << " parameters.\n"
18224 << "This ambiguity can not be solved by arts.\n"
18225 << "Please see the arts user guide chapter 3.\n";
18226 throw runtime_error(os.str());
18227 }
18228 }
18229 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18230 else if ( "H2O-ContMPM93"==name )
18231 {
18232 // self and foreign continuum term are simultaneously calculated
18233 // since the parameterization can not be divided up in these two
18234 // terms because they are not additive terms.
18235 //
18236 // specific continuum parameters and units:
18237 // OUTPUT
18238 // pxsec : [1/m],
18239 // INPUT
18240 // parameters[0] : pseudo continuum line frequency [Hz]
18241 // parameters[1] : pseudo continuum line strength parameter [Hz/Pa]
18242 // parameters[2] : pseudo continuum line strength temperature parameter [1]
18243 // parameters[3] : pseudo continuum line broadening parameter [Hz/Pa]
18244 // parameters[4] : pseudo continuum line broadening parameter [1]
18245 // parameters[5] : pseudo continuum line broadening parameter [1]
18246 // parameters[6] : pseudo continuum line broadening parameter [1]
18247 // f_grid : [Hz]
18248 // abs_p : [Pa]
18249 // abs_t : [K]
18250 // vmr : [1]
18251 //
18252 const int Nparam = 7;
18253 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18254 {
18255 out3 << "Continuum model " << name << " is running with \n"
18256 << "user defined parameters according to model " << model << ".\n";
18257 MPM93_H2O_continuum( pxsec,
18258 parameters[0],
18259 parameters[1],
18260 parameters[2],
18261 parameters[3],
18262 parameters[4],
18263 parameters[5],
18264 parameters[6],
18265 model,
18266 f_grid,
18267 abs_p,
18268 abs_t,
18269 vmr,
18270 verbosity );
18271 }
18272 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18273 {
18274 ostringstream os;
18275 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18276 << "parameters for the model " << model << ",\n"
18277 << "but you specified " << parameters.nelem() << " parameters.\n";
18278 throw runtime_error(os.str());
18279 }
18280 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18281 {
18282 out3 << "Continuum model " << name << " running with \n"
18283 << "the parameters for model " << model << ".\n";
18284 MPM93_H2O_continuum( pxsec,
18285 0.00,
18286 0.00,
18287 0.00,
18288 0.00,
18289 0.00,
18290 0.00,
18291 0.00,
18292 model,
18293 f_grid,
18294 abs_p,
18295 abs_t,
18296 vmr,
18297 verbosity );
18298 }
18299 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18300 {
18301 ostringstream os;
18302 os << "ERROR: Continuum model " << name << " requires NO input\n"
18303 << "parameters for the model " << model << ",\n"
18304 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
18305 << "This ambiguity can not be solved by arts.\n"
18306 << "Please see the arts user guide chapter 3.\n";
18307 throw runtime_error(os.str());
18308 }
18309 }
18310 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18311 else if ( "H2O-ForeignContATM01"==name )
18312 {
18313 // Foreign wet continuum term.
18314 //
18315 // Pardo et al., IEEE, Trans. Ant. Prop.,
18316 // Vol 49, No 12, pp. 1683-1694, 2001.
18317 //
18318 // specific continuum parameters and units:
18319 // OUTPUT
18320 // pxsec : [1/m],
18321 // INPUT
18322 // parameters[0] : pseudo continuum line frequency [Hz]
18323 // f_grid : [Hz]
18324 // abs_p : [Pa]
18325 // abs_t : [K]
18326 // vmr : [1]
18327 //
18328 const int Nparam = 1;
18329 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18330 {
18331 out3 << "Continuum model " << name << " is running with \n"
18332 << "user defined parameters according to model " << model << ".\n";
18333 Pardo_ATM_H2O_ForeignContinuum( pxsec,
18334 parameters[0],
18335 model,
18336 f_grid,
18337 abs_p,
18338 abs_t,
18339 vmr,
18340 verbosity );
18341 }
18342 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18343 {
18344 ostringstream os;
18345 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18346 << "parameters for the model " << model << ",\n"
18347 << "but you specified " << parameters.nelem() << " parameters.\n";
18348 throw runtime_error(os.str());
18349 }
18350 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18351 {
18352 out3 << "Continuum model " << name << " running with \n"
18353 << "the parameters for model " << model << ".\n";
18354 Pardo_ATM_H2O_ForeignContinuum( pxsec,
18355 0.000,
18356 model,
18357 f_grid,
18358 abs_p,
18359 abs_t,
18360 vmr,
18361 verbosity );
18362 }
18363 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18364 {
18365 ostringstream os;
18366 os << "ERROR: Continuum model " << name << " requires NO input\n"
18367 << "parameters for the model " << model << ",\n"
18368 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
18369 << "This ambiguity can not be solved by arts.\n"
18370 << "Please see the arts user guide chapter 3.\n";
18371 throw runtime_error(os.str());
18372 }
18373 }
18374 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18375 else if ( "H2O-SelfContCKD222"==name )
18376 {
18377 // OUTPUT:
18378 // pxsec cross section (absorption/volume mixing ratio) of
18379 // H2O self continuum according to CKD2.2.2 [1/m]
18380 // INPUT:
18381 // parameters[0] strength scaling factor [1]
18382 // model allows user defined input parameter set
18383 // (Cin) or choice of
18384 // pre-defined parameters of specific models (see note below).
18385 // f_grid predefined frequency grid [Hz]
18386 // abs_p predefined pressure grid [Pa]
18387 // abs_t predefined temperature grid [K]
18388 // vmr H2O volume mixing ratio profile [1]
18389 //
18390 // WWW resource: ftp.aer.com/aer_contnm_ckd
18391 const int Nparam = 1;
18392 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18393 {
18394 out3 << "Continuum model " << name << " is running with \n"
18395 << "user defined parameters according to model " << model << ".\n";
18396 CKD_222_self_h2o( pxsec,
18397 parameters[0],
18398 model,
18399 f_grid,
18400 abs_p,
18401 abs_t,
18402 vmr,
18403 verbosity );
18404 }
18405 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18406 {
18407 ostringstream os;
18408 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18409 << "parameters for the model " << model << ",\n"
18410 << "but you specified " << parameters.nelem() << " parameters.\n";
18411 throw runtime_error(os.str());
18412 }
18413 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18414 {
18415 out3 << "Continuum model " << name << " running with \n"
18416 << "the parameters for model " << model << ".\n";
18417 CKD_222_self_h2o( pxsec,
18418 0.000,
18419 model,
18420 f_grid,
18421 abs_p,
18422 abs_t,
18423 vmr,
18424 verbosity );
18425 }
18426 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18427 {
18428 ostringstream os;
18429 os << "ERROR: continuum model " << name << " requires NO input\n"
18430 << "parameters for the model " << model << ",\n"
18431 << "but you specified " << parameters.nelem() << " parameters.\n"
18432 << "This ambiguity can not be solved by arts.\n"
18433 << "Please see the arts user guide chapter 3.\n";
18434 throw runtime_error(os.str());
18435 }
18436 }
18437 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18438 else if ( "H2O-ForeignContCKD222"==name )
18439 {
18440 // OUTPUT:
18441 // pxsec cross section (absorption/volume mixing ratio) of
18442 // H2O foreign continuum according to CKD2.2.2 [1/m]
18443 // INPUT:
18444 // parameters[0] strength scaling factor [1]
18445 // model allows user defined input parameter set
18446 // (Cin) or choice of
18447 // pre-defined parameters of specific models (see note below).
18448 // f_grid predefined frequency grid [Hz]
18449 // abs_p predefined pressure grid [Pa]
18450 // abs_t predefined temperature grid [K]
18451 // vmr H2O volume mixing ratio profile [1]
18452 //
18453 // WWW resource: ftp.aer.com/aer_contnm_ckd
18454 const int Nparam = 1;
18455 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18456 {
18457 out3 << "Continuum model " << name << " is running with \n"
18458 << "user defined parameters according to model " << model << ".\n";
18459 CKD_222_foreign_h2o( pxsec,
18460 parameters[0],
18461 model,
18462 f_grid,
18463 abs_p,
18464 abs_t,
18465 vmr,
18466 verbosity );
18467 }
18468 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18469 {
18470 ostringstream os;
18471 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18472 << "parameters for the model " << model << ",\n"
18473 << "but you specified " << parameters.nelem() << " parameters.\n";
18474 throw runtime_error(os.str());
18475 }
18476 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18477 {
18478 out3 << "Continuum model " << name << " running with \n"
18479 << "the parameters for model " << model << ".\n";
18480 CKD_222_foreign_h2o( pxsec,
18481 0.000,
18482 model,
18483 f_grid,
18484 abs_p,
18485 abs_t,
18486 vmr,
18487 verbosity );
18488 }
18489 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18490 {
18491 ostringstream os;
18492 os << "ERROR: continuum model " << name << " requires NO input\n"
18493 << "parameters for the model " << model << ",\n"
18494 << "but you specified " << parameters.nelem() << " parameters.\n"
18495 << "This ambiguity can not be solved by arts.\n"
18496 << "Please see the arts user guide chapter 3.\n";
18497 throw runtime_error(os.str());
18498 }
18499 }
18500 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18501 else if ( "H2O-SelfContCKD242"==name )
18502 {
18503 // OUTPUT:
18504 // pxsec cross section (absorption/volume mixing ratio) of
18505 // H2O self continuum according to CKD2.4.2 [1/m]
18506 // INPUT:
18507 // parameters[0] strength scaling factor [1]
18508 // model allows user defined input parameter set
18509 // (Cin) or choice of
18510 // pre-defined parameters of specific models (see note below).
18511 // f_grid predefined frequency grid [Hz]
18512 // abs_p predefined pressure grid [Pa]
18513 // abs_t predefined temperature grid [K]
18514 // vmr H2O volume mixing ratio profile [1]
18515 //
18516 // WWW resource: ftp.aer.com/aer_contnm_ckd
18517 const int Nparam = 1;
18518 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18519 {
18520 out3 << "Continuum model " << name << " is running with \n"
18521 << "user defined parameters according to model " << model << ".\n";
18522 CKD_242_self_h2o( pxsec,
18523 parameters[0],
18524 model,
18525 f_grid,
18526 abs_p,
18527 abs_t,
18528 vmr,
18529 verbosity );
18530 }
18531 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18532 {
18533 ostringstream os;
18534 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18535 << "parameters for the model " << model << ",\n"
18536 << "but you specified " << parameters.nelem() << " parameters.\n";
18537 throw runtime_error(os.str());
18538 }
18539 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18540 {
18541 out3 << "Continuum model " << name << " running with \n"
18542 << "the parameters for model " << model << ".\n";
18543 CKD_242_self_h2o( pxsec,
18544 0.000,
18545 model,
18546 f_grid,
18547 abs_p,
18548 abs_t,
18549 vmr,
18550 verbosity );
18551 }
18552 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18553 {
18554 ostringstream os;
18555 os << "ERROR: continuum model " << name << " requires NO input\n"
18556 << "parameters for the model " << model << ",\n"
18557 << "but you specified " << parameters.nelem() << " parameters.\n"
18558 << "This ambiguity can not be solved by arts.\n"
18559 << "Please see the arts user guide chapter 3.\n";
18560 throw runtime_error(os.str());
18561 }
18562 }
18563 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18564 else if ( "H2O-ForeignContCKD242"==name )
18565 {
18566 // OUTPUT:
18567 // pxsec cross section (absorption/volume mixing ratio) of
18568 // H2O foreign continuum according to CKD2.4.2 [1/m]
18569 // INPUT:
18570 // parameters[0] strength scaling factor [1]
18571 // model allows user defined input parameter set
18572 // (Cin) or choice of
18573 // pre-defined parameters of specific models (see note below).
18574 // f_grid predefined frequency grid [Hz]
18575 // abs_p predefined pressure grid [Pa]
18576 // abs_t predefined temperature grid [K]
18577 // vmr H2O volume mixing ratio profile [1]
18578 //
18579 // WWW resource: ftp.aer.com/aer_contnm_ckd
18580 const int Nparam = 1;
18581 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18582 {
18583 out3 << "Continuum model " << name << " is running with \n"
18584 << "user defined parameters according to model " << model << ".\n";
18585 CKD_242_foreign_h2o( pxsec,
18586 parameters[0],
18587 model,
18588 f_grid,
18589 abs_p,
18590 abs_t,
18591 vmr,
18592 verbosity );
18593 }
18594 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18595 {
18596 ostringstream os;
18597 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18598 << "parameters for the model " << model << ",\n"
18599 << "but you specified " << parameters.nelem() << " parameters.\n";
18600 throw runtime_error(os.str());
18601 }
18602 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18603 {
18604 out3 << "Continuum model " << name << " running with \n"
18605 << "the parameters for model " << model << ".\n";
18606 CKD_242_foreign_h2o( pxsec,
18607 0.000,
18608 model,
18609 f_grid,
18610 abs_p,
18611 abs_t,
18612 vmr,
18613 verbosity );
18614 }
18615 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18616 {
18617 ostringstream os;
18618 os << "ERROR: continuum model " << name << " requires NO input\n"
18619 << "parameters for the model " << model << ",\n"
18620 << "but you specified " << parameters.nelem() << " parameters.\n"
18621 << "This ambiguity can not be solved by arts.\n"
18622 << "Please see the arts user guide chapter 3.\n";
18623 throw runtime_error(os.str());
18624 }
18625 }
18626 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18627 else if ( "H2O-SelfContCKDMT100"==name )
18628 {
18629 // OUTPUT:
18630 // pxsec cross section (absorption/volume mixing ratio) of
18631 // H2O self continuum according to CKD MT 1.00 [1/m]
18632 // INPUT:
18633 // parameters[0] strength scaling factor [1]
18634 // model allows user defined input parameter set
18635 // (Cin) or choice of
18636 // pre-defined parameters of specific models (see note below).
18637 // f_grid predefined frequency grid [Hz]
18638 // abs_p predefined pressure grid [Pa]
18639 // abs_t predefined temperature grid [K]
18640 // vmr H2O volume mixing ratio profile [1]
18641 //
18642 // WWW resource: ftp.aer.com/aer_contnm_ckd
18643 const int Nparam = 1;
18644 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18645 {
18646 out3 << "Continuum model " << name << " is running with \n"
18647 << "user defined parameters according to model " << model << ".\n";
18648 CKD_mt_100_self_h2o( pxsec,
18649 parameters[0],
18650 model,
18651 f_grid,
18652 abs_p,
18653 abs_t,
18654 vmr,
18655 verbosity );
18656 }
18657 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18658 {
18659 ostringstream os;
18660 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18661 << "parameters for the model " << model << ",\n"
18662 << "but you specified " << parameters.nelem() << " parameters.\n";
18663 throw runtime_error(os.str());
18664 }
18665 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18666 {
18667 out3 << "Continuum model " << name << " running with \n"
18668 << "the parameters for model " << model << ".\n";
18669 CKD_mt_100_self_h2o( pxsec,
18670 0.000,
18671 model,
18672 f_grid,
18673 abs_p,
18674 abs_t,
18675 vmr,
18676 verbosity );
18677 }
18678 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18679 {
18680 ostringstream os;
18681 os << "ERROR: continuum model " << name << " requires NO input\n"
18682 << "parameters for the model " << model << ",\n"
18683 << "but you specified " << parameters.nelem() << " parameters.\n"
18684 << "This ambiguity can not be solved by arts.\n"
18685 << "Please see the arts user guide chapter 3.\n";
18686 throw runtime_error(os.str());
18687 }
18688 }
18689 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18690 else if ( "H2O-ForeignContCKDMT100"==name )
18691 {
18692 // OUTPUT:
18693 // pxsec cross section (absorption/volume mixing ratio) of
18694 // H2O foreign continuum according to CKD MT 1.00 [1/m]
18695 // INPUT:
18696 // parameters[0] strength scaling factor [1]
18697 // model allows user defined input parameter set
18698 // (Cin) or choice of
18699 // pre-defined parameters of specific models (see note below).
18700 // f_grid predefined frequency grid [Hz]
18701 // abs_p predefined pressure grid [Pa]
18702 // abs_t predefined temperature grid [K]
18703 // vmr H2O volume mixing ratio profile [1]
18704 //
18705 // WWW resource: ftp.aer.com/aer_contnm_ckd
18706 const int Nparam = 1;
18707 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18708 {
18709 out3 << "Continuum model " << name << " is running with \n"
18710 << "user defined parameters according to model " << model << ".\n";
18711 CKD_mt_100_foreign_h2o( pxsec,
18712 parameters[0],
18713 model,
18714 f_grid,
18715 abs_p,
18716 abs_t,
18717 vmr,
18718 verbosity );
18719 }
18720 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18721 {
18722 ostringstream os;
18723 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18724 << "parameters for the model " << model << ",\n"
18725 << "but you specified " << parameters.nelem() << " parameters.\n";
18726 throw runtime_error(os.str());
18727 }
18728 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18729 {
18730 out3 << "Continuum model " << name << " running with \n"
18731 << "the parameters for model " << model << ".\n";
18732 CKD_mt_100_foreign_h2o( pxsec,
18733 0.000,
18734 model,
18735 f_grid,
18736 abs_p,
18737 abs_t,
18738 vmr,
18739 verbosity );
18740 }
18741 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18742 {
18743 ostringstream os;
18744 os << "ERROR: continuum model " << name << " requires NO input\n"
18745 << "parameters for the model " << model << ",\n"
18746 << "but you specified " << parameters.nelem() << " parameters.\n"
18747 << "This ambiguity can not be solved by arts.\n"
18748 << "Please see the arts user guide chapter 3.\n";
18749 throw runtime_error(os.str());
18750 }
18751 }
18752 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18753 else if ( "H2O-SelfContCKDMT252"==name )
18754 {
18755 // OUTPUT:
18756 // pxsec cross section (absorption/volume mixing ratio) of
18757 // H2O self continuum according to CKD MT 2.50 [1/m]
18758 // INPUT:
18759 // parameters[0] strength scaling factor [1]
18760 // model allows user defined input parameter set
18761 // (Cin) or choice of
18762 // pre-defined parameters of specific models (see note below).
18763 // f_grid predefined frequency grid [Hz]
18764 // abs_p predefined pressure grid [Pa]
18765 // abs_t predefined temperature grid [K]
18766 // vmr H2O volume mixing ratio profile [1]
18767 //
18768 // WWW resource: ftp.aer.com/aer_contnm_ckd
18769 const int Nparam = 1;
18770 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18771 {
18772 out3 << "Continuum model " << name << " is running with \n"
18773 << "user defined parameters according to model " << model << ".\n";
18774 CKD_mt_250_self_h2o( pxsec,
18775 parameters[0],
18776 model,
18777 f_grid,
18778 abs_p,
18779 abs_t,
18780 vmr,
18781 verbosity );
18782 }
18783 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18784 {
18785 ostringstream os;
18786 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18787 << "parameters for the model " << model << ",\n"
18788 << "but you specified " << parameters.nelem() << " parameters.\n";
18789 throw runtime_error(os.str());
18790 }
18791 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18792 {
18793 out3 << "Continuum model " << name << " running with \n"
18794 << "the parameters for model " << model << ".\n";
18795 CKD_mt_250_self_h2o( pxsec,
18796 0.000,
18797 model,
18798 f_grid,
18799 abs_p,
18800 abs_t,
18801 vmr,
18802 verbosity );
18803 }
18804 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18805 {
18806 ostringstream os;
18807 os << "ERROR: continuum model " << name << " requires NO input\n"
18808 << "parameters for the model " << model << ",\n"
18809 << "but you specified " << parameters.nelem() << " parameters.\n"
18810 << "This ambiguity can not be solved by arts.\n"
18811 << "Please see the arts user guide chapter 3.\n";
18812 throw runtime_error(os.str());
18813 }
18814 }
18815 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18816 else if ( "H2O-ForeignContCKDMT252"==name )
18817 {
18818 // OUTPUT:
18819 // pxsec cross section (absorption/volume mixing ratio) of
18820 // H2O foreign continuum according to CKD MT 2.50 [1/m]
18821 // INPUT:
18822 // parameters[0] strength scaling factor [1]
18823 // model allows user defined input parameter set
18824 // (Cin) or choice of
18825 // pre-defined parameters of specific models (see note below).
18826 // f_grid predefined frequency grid [Hz]
18827 // abs_p predefined pressure grid [Pa]
18828 // abs_t predefined temperature grid [K]
18829 // vmr H2O volume mixing ratio profile [1]
18830 //
18831 // WWW resource: ftp.aer.com/aer_contnm_ckd
18832 const int Nparam = 1;
18833 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18834 {
18835 out3 << "Continuum model " << name << " is running with \n"
18836 << "user defined parameters according to model " << model << ".\n";
18837 CKD_mt_250_foreign_h2o( pxsec,
18838 parameters[0],
18839 model,
18840 f_grid,
18841 abs_p,
18842 abs_t,
18843 vmr,
18844 verbosity );
18845 }
18846 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18847 {
18848 ostringstream os;
18849 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18850 << "parameters for the model " << model << ",\n"
18851 << "but you specified " << parameters.nelem() << " parameters.\n";
18852 throw runtime_error(os.str());
18853 }
18854 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18855 {
18856 out3 << "Continuum model " << name << " running with \n"
18857 << "the parameters for model " << model << ".\n";
18858 CKD_mt_250_foreign_h2o( pxsec,
18859 0.000,
18860 model,
18861 f_grid,
18862 abs_p,
18863 abs_t,
18864 vmr,
18865 verbosity );
18866 }
18867 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18868 {
18869 ostringstream os;
18870 os << "ERROR: continuum model " << name << " requires NO input\n"
18871 << "parameters for the model " << model << ",\n"
18872 << "but you specified " << parameters.nelem() << " parameters.\n"
18873 << "This ambiguity can not be solved by arts.\n"
18874 << "Please see the arts user guide chapter 3.\n";
18875 throw runtime_error(os.str());
18876 }
18877 }
18878
18879 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18880 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18881 else if ( "H2O-SelfContCKDMT320"==name )
18882 {
18883 // OUTPUT:
18884 // pxsec cross section (absorption/volume mixing ratio) of
18885 // H2O self continuum according to CKD MT 2.50 [1/m]
18886 // INPUT:
18887 // parameters[0] strength scaling factor [1]
18888 // model allows user defined input parameter set
18889 // (Cin) or choice of
18890 // pre-defined parameters of specific models (see note below).
18891 // f_grid predefined frequency grid [Hz]
18892 // abs_p predefined pressure grid [Pa]
18893 // abs_t predefined temperature grid [K]
18894 // vmr H2O volume mixing ratio profile [1]
18895 //
18896 // WWW resource: ftp.aer.com/aer_contnm_ckd
18897 const int Nparam = 1;
18898 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18899 {
18900 out3 << "Continuum model " << name << " is running with \n"
18901 << "user defined parameters according to model " << model << ".\n";
18902 CKD_mt_320_self_h2o( pxsec,
18903 parameters[0],
18904 model,
18905 f_grid,
18906 abs_p,
18907 abs_t,
18908 vmr,
18909 verbosity );
18910 }
18911 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18912 {
18913 ostringstream os;
18914 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18915 << "parameters for the model " << model << ",\n"
18916 << "but you specified " << parameters.nelem() << " parameters.\n";
18917 throw runtime_error(os.str());
18918 }
18919 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18920 {
18921 out3 << "Continuum model " << name << " running with \n"
18922 << "the parameters for model " << model << ".\n";
18923 CKD_mt_320_self_h2o( pxsec,
18924 0.000,
18925 model,
18926 f_grid,
18927 abs_p,
18928 abs_t,
18929 vmr,
18930 verbosity );
18931 }
18932 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18933 {
18934 ostringstream os;
18935 os << "ERROR: continuum model " << name << " requires NO input\n"
18936 << "parameters for the model " << model << ",\n"
18937 << "but you specified " << parameters.nelem() << " parameters.\n"
18938 << "This ambiguity can not be solved by arts.\n"
18939 << "Please see the arts user guide chapter 3.\n";
18940 throw runtime_error(os.str());
18941 }
18942 }
18943 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18944 else if ( "H2O-ForeignContCKDMT320"==name )
18945 {
18946 // OUTPUT:
18947 // pxsec cross section (absorption/volume mixing ratio) of
18948 // H2O foreign continuum according to CKD MT 2.50 [1/m]
18949 // INPUT:
18950 // parameters[0] strength scaling factor [1]
18951 // model allows user defined input parameter set
18952 // (Cin) or choice of
18953 // pre-defined parameters of specific models (see note below).
18954 // f_grid predefined frequency grid [Hz]
18955 // abs_p predefined pressure grid [Pa]
18956 // abs_t predefined temperature grid [K]
18957 // vmr H2O volume mixing ratio profile [1]
18958 //
18959 // WWW resource: ftp.aer.com/aer_contnm_ckd
18960 const int Nparam = 1;
18961 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
18962 {
18963 out3 << "Continuum model " << name << " is running with \n"
18964 << "user defined parameters according to model " << model << ".\n";
18965 CKD_mt_320_foreign_h2o( pxsec,
18966 parameters[0],
18967 model,
18968 f_grid,
18969 abs_p,
18970 abs_t,
18971 vmr,
18972 verbosity );
18973 }
18974 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
18975 {
18976 ostringstream os;
18977 os << "Continuum model " << name << " requires " << Nparam << " input\n"
18978 << "parameters for the model " << model << ",\n"
18979 << "but you specified " << parameters.nelem() << " parameters.\n";
18980 throw runtime_error(os.str());
18981 }
18982 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
18983 {
18984 out3 << "Continuum model " << name << " running with \n"
18985 << "the parameters for model " << model << ".\n";
18986 CKD_mt_320_foreign_h2o( pxsec,
18987 0.000,
18988 model,
18989 f_grid,
18990 abs_p,
18991 abs_t,
18992 vmr,
18993 verbosity );
18994 }
18995 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
18996 {
18997 ostringstream os;
18998 os << "ERROR: continuum model " << name << " requires NO input\n"
18999 << "parameters for the model " << model << ",\n"
19000 << "but you specified " << parameters.nelem() << " parameters.\n"
19001 << "This ambiguity can not be solved by arts.\n"
19002 << "Please see the arts user guide chapter 3.\n";
19003 throw runtime_error(os.str());
19004 }
19005 }
19006
19007// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19008
19009 else if ( "H2O-SelfContCKD24"==name )
19010 {
19011 // OUTPUT:
19012 // pxsec cross section (absorption/volume mixing ratio) of
19013 // H2O continuum according to CKD2.4 [1/m]
19014 // INPUT:
19015 // parameters[0] strength scaling factor [1]
19016 // model allows user defined input parameter set
19017 // (Cin) or choice of
19018 // pre-defined parameters of specific models (see note below).
19019 // f_grid predefined frequency grid [Hz]
19020 // abs_p predefined pressure grid [Pa]
19021 // abs_t predefined temperature grid [K]
19022 // abs_n2 N2 volume mixing ratio profile [1]
19023 // vmr H2O volume mixing ratio profile [1]
19024 //
19025 // WWW resource: ftp.aer.com/aer_contnm_ckd
19026
19027 // abs_n2 needed here. check, whether this is valid.
19028 if( abs_n2.sum() < -1. )
19029 {
19030 ostringstream os;
19031 os << "Continuum/full model tag " << name
19032 << " requires N2-vmr, but no tag group contains N2!";
19033 throw runtime_error(os.str());
19034 }
19035
19036 const int Nparam = 1;
19037 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19038 {
19039 out3 << "Continuum model " << name << " is running with \n"
19040 << "user defined parameters according to model " << model << ".\n";
19041 CKD24_H20( pxsec,
19042 0,
19043 parameters[0],
19044 model,
19045 f_grid,
19046 abs_p,
19047 abs_t,
19048 vmr,
19049 abs_n2,
19050 verbosity );
19051 }
19052 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19053 {
19054 ostringstream os;
19055 os << "Continuum model " << name << " requires " << Nparam << " input\n"
19056 << "parameters for the model " << model << ",\n"
19057 << "but you specified " << parameters.nelem() << " parameters.\n";
19058 throw runtime_error(os.str());
19059 }
19060 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19061 {
19062 out3 << "Continuum model " << name << " running with \n"
19063 << "the parameters for model " << model << ".\n";
19064 CKD24_H20( pxsec,
19065 0,
19066 0.000,
19067 model,
19068 f_grid,
19069 abs_p,
19070 abs_t,
19071 vmr,
19072 abs_n2,
19073 verbosity );
19074 }
19075 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19076 {
19077 ostringstream os;
19078 os << "ERROR: continuum model " << name << " requires NO input\n"
19079 << "parameters for the model " << model << ",\n"
19080 << "but you specified " << parameters.nelem() << " parameters.\n"
19081 << "This ambiguity can not be solved by arts.\n"
19082 << "Please see the arts user guide chapter 3.\n";
19083 throw runtime_error(os.str());
19084 }
19085 }
19086 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19087 else if ( "H2O-ForeignContCKD24"==name )
19088 {
19089 // OUTPUT:
19090 // pxsec cross section (absorption/volume mixing ratio) of
19091 // H2O continuum according to CKD2.4 [1/m]
19092 // INPUT:
19093 // Cin strength scaling factor [1]
19094 // model allows user defined input parameter set
19095 // (Cin) or choice of
19096 // pre-defined parameters of specific models (see note below).
19097 // f_grid predefined frequency grid [Hz]
19098 // abs_p predefined pressure grid [Pa]
19099 // abs_t predefined temperature grid [K]
19100 // vmr H2O volume mixing ratio profile [1]
19101 // abs_n2 N2 volume mixing ratio profile [1]
19102 //
19103 // WWW resource: ftp.aer.com/aer_contnm_ckd
19104
19105 if( abs_n2.sum() < -1. )
19106 {
19107 ostringstream os;
19108 os << "Continuum/full model tag " << name
19109 << " requires N2-vmr, but no tag group contains N2!";
19110 throw runtime_error(os.str());
19111 }
19112
19113 const int Nparam = 1;
19114 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19115 {
19116 out3 << "Continuum model " << name << " is running with \n"
19117 << "user defined parameters according to model " << model << ".\n";
19118 CKD24_H20( pxsec,
19119 1,
19120 parameters[0],
19121 model,
19122 f_grid,
19123 abs_p,
19124 abs_t,
19125 vmr,
19126 abs_n2,
19127 verbosity );
19128 }
19129 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19130 {
19131 ostringstream os;
19132 os << "Continuum model " << name << " requires " << Nparam << " input\n"
19133 << "parameters for the model " << model << ",\n"
19134 << "but you specified " << parameters.nelem() << " parameters.\n";
19135 throw runtime_error(os.str());
19136 }
19137 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19138 {
19139 out3 << "Continuum model " << name << " running with \n"
19140 << "the parameters for model " << model << ".\n";
19141 CKD24_H20( pxsec,
19142 1,
19143 0,
19144 model,
19145 f_grid,
19146 abs_p,
19147 abs_t,
19148 vmr,
19149 abs_n2,
19150 verbosity );
19151 }
19152 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19153 {
19154 ostringstream os;
19155 os << "ERROR: continuum model " << name << " requires NO input\n"
19156 << "parameters for the model " << model << ",\n"
19157 << "but you specified " << parameters.nelem() << " parameters.\n"
19158 << "This ambiguity can not be solved by arts.\n"
19159 << "Please see the arts user guide chapter 3.\n";
19160 throw runtime_error(os.str());
19161 }
19162 }
19163 // ============= H2O full models ======================================================
19164 else if ( "H2O-CP98"==name )
19165 {
19166 //
19167 // specific continuum parameters and units:
19168 // OUTPUT
19169 // pxsec : [1/m],
19170 // INPUT
19171 // parameters[0] : continuum scale factor (CC) [1]
19172 // parameters[1] : line strength scale factor (CL) [1]
19173 // parameters[2] : line broadening scale factor (CW) [1]
19174 // f_grid : [Hz]
19175 // abs_p : [Pa]
19176 // abs_t : [K]
19177 // vmr : [1]
19178 //
19179 const int Nparam = 3;
19180 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19181 {
19182 out3 << "Full model " << name << " is running with \n"
19183 << "user defined parameters according to model " << model << ".\n";
19184 CP98H2OAbsModel( pxsec,
19185 parameters[0],
19186 parameters[1],
19187 parameters[2],
19188 model,
19189 f_grid,
19190 abs_p,
19191 abs_t,
19192 vmr,
19193 verbosity );
19194 }
19195 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19196 {
19197 ostringstream os;
19198 os << "Full model " << name << " requires " << Nparam << " input\n"
19199 << "parameters for the model " << model << ",\n"
19200 << "but you specified " << parameters.nelem() << " parameters.\n";
19201 throw runtime_error(os.str());
19202 }
19203 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19204 {
19205 out3 << "Full model " << name << " running with \n"
19206 << "the parameters for model " << model << ".\n";
19207 CP98H2OAbsModel( pxsec,
19208 0.00,
19209 0.00,
19210 0.00,
19211 model,
19212 f_grid,
19213 abs_p,
19214 abs_t,
19215 vmr,
19216 verbosity );
19217 }
19218 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19219 {
19220 ostringstream os;
19221 os << "ERROR: Full model " << name << " requires NO input\n"
19222 << "parameters for the model " << model << ",\n"
19223 << "but you specified " << parameters.nelem() << " parameters.\n"
19224 << "This ambiguity can not be solved by arts.\n"
19225 << "Please see the arts user guide chapter 3.\n";
19226 throw runtime_error(os.str());
19227 }
19228 }
19229 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19230 else if ( "H2O-MPM87"==name )
19231 {
19232 //
19233 // specific continuum parameters and units:
19234 // a) output
19235 // pxsec : [1/m],
19236 // b) input
19237 // parameters[0] : continuum scale factor (CC) [1]
19238 // parameters[1] : line strength scale factor (CL) [1]
19239 // parameters[2] : line broadening scale factor (CW) [1]
19240 // f_grid : [Hz]
19241 // abs_p : [Pa]
19242 // abs_t : [K]
19243 // vmr : [1]
19244 //
19245 const int Nparam = 3;
19246 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19247 {
19248 out3 << "Full model " << name << " is running with \n"
19249 << "user defined parameters according to model " << model << ".\n";
19250 MPM87H2OAbsModel( pxsec,
19251 parameters[0],
19252 parameters[1],
19253 parameters[2],
19254 model,
19255 f_grid,
19256 abs_p,
19257 abs_t,
19258 vmr,
19259 verbosity );
19260 }
19261 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19262 {
19263 ostringstream os;
19264 os << "Full model " << name << " requires " << Nparam << " input\n"
19265 << "parameters for the model " << model << ",\n"
19266 << "but you specified " << parameters.nelem() << " parameters.\n";
19267 throw runtime_error(os.str());
19268 }
19269 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19270 {
19271 out3 << "Full model " << name << " running with \n"
19272 << "the parameters for model " << model << ".\n";
19273 MPM87H2OAbsModel( pxsec,
19274 0.00,
19275 0.00,
19276 0.00,
19277 model,
19278 f_grid,
19279 abs_p,
19280 abs_t,
19281 vmr,
19282 verbosity );
19283 }
19284 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19285 {
19286 ostringstream os;
19287 os << "ERROR: Full model " << name << " requires NO input\n"
19288 << "parameters for the model " << model << ",\n"
19289 << "but you specified " << parameters.nelem() << " parameters.\n"
19290 << "This ambiguity can not be solved by arts.\n"
19291 << "Please see the arts user guide chapter 3.\n";
19292 throw runtime_error(os.str());
19293 }
19294 }
19295 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19296 else if ( "H2O-MPM89"==name )
19297 {
19298 //
19299 // specific continuum parameters and units:
19300 // a) output
19301 // pxsec : [1/m],
19302 // b) input
19303 // parameters[0] : continuum scale factor (CC) [1]
19304 // parameters[1] : line strength scale factor (CL) [1]
19305 // parameters[2] : line broadening scale factor (CW [1]
19306 // f_grid : [Hz]
19307 // abs_p : [Pa]
19308 // abs_t : [K]
19309 // vmr : [1]
19310 //
19311 const int Nparam = 3;
19312 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19313 {
19314 out3 << "Full model " << name << " is running with \n"
19315 << "user defined parameters according to model " << model << ".\n";
19316 MPM89H2OAbsModel( pxsec,
19317 parameters[0],
19318 parameters[1],
19319 parameters[2],
19320 model,
19321 f_grid,
19322 abs_p,
19323 abs_t,
19324 vmr,
19325 verbosity );
19326 }
19327 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19328 {
19329 ostringstream os;
19330 os << "Full model " << name << " requires " << Nparam << " input\n"
19331 << "parameters for the model " << model << ",\n"
19332 << "but you specified " << parameters.nelem() << " parameters.\n";
19333 throw runtime_error(os.str());
19334 }
19335 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19336 {
19337 out3 << "Full model " << name << " running with \n"
19338 << "the parameters for model " << model << ".\n";
19339 MPM89H2OAbsModel( pxsec,
19340 0.00,
19341 0.00,
19342 0.00,
19343 model,
19344 f_grid,
19345 abs_p,
19346 abs_t,
19347 vmr,
19348 verbosity );
19349 }
19350 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19351 {
19352 ostringstream os;
19353 os << "ERROR: Full model " << name << " requires NO input\n"
19354 << "parameters for the model " << model << ",\n"
19355 << "but you specified " << parameters.nelem() << " parameters.\n"
19356 << "This ambiguity can not be solved by arts.\n"
19357 << "Please see the arts user guide chapter 3.\n";
19358 throw runtime_error(os.str());
19359 }
19360 }
19361 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19362 else if ( "H2O-MPM93"==name )
19363 {
19364 //
19365 // specific continuum parameters and units:
19366 // OUTPUT
19367 // pxsec : [1/m],
19368 // INPUT
19369 // parameters[0] : continuum scale factor (CC) [1]
19370 // parameters[1] : line strength scale factor (CL) [1]
19371 // parameters[2] : line broadening scale factor (CW) [1]
19372 // f_grid : [Hz]
19373 // abs_p : [Pa]
19374 // abs_t : [K]
19375 // vmr : [1]
19376 //
19377 const int Nparam = 3;
19378 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19379 {
19380 out3 << "Full model " << name << " is running with \n"
19381 << "user defined parameters according to model " << model << ".\n";
19382 MPM93H2OAbsModel( pxsec,
19383 parameters[0],
19384 parameters[1],
19385 parameters[2],
19386 model,
19387 f_grid,
19388 abs_p,
19389 abs_t,
19390 vmr,
19391 verbosity );
19392 }
19393 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19394 {
19395 ostringstream os;
19396 os << "Full model " << name << " requires " << Nparam << " input\n"
19397 << "parameters for the model " << model << ",\n"
19398 << "but you specified " << parameters.nelem() << " parameters.\n";
19399 throw runtime_error(os.str());
19400 }
19401 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19402 {
19403 out3 << "Full model " << name << " running with \n"
19404 << "the parameters for model " << model << ".\n";
19405 MPM93H2OAbsModel( pxsec,
19406 0.00,
19407 0.00,
19408 0.00,
19409 model,
19410 f_grid,
19411 abs_p,
19412 abs_t,
19413 vmr,
19414 verbosity );
19415 }
19416 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19417 {
19418 ostringstream os;
19419 os << "ERROR: Full model " << name << " requires NO input\n"
19420 << "parameters for the model " << model << ",\n"
19421 << "but you specified " << parameters.nelem() << " parameters.\n"
19422 << "This ambiguity can not be solved by arts.\n"
19423 << "Please see the arts user guide chapter 3.\n";
19424 throw runtime_error(os.str());
19425 }
19426 }
19427 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19428 else if ( "H2O-PWR98"==name )
19429 {
19430 // specific continuum parameters and units:
19431 // OUTPUT
19432 // pxsec : [1/m],
19433 // INPUT
19434 // parameters[0] : continuum scale factor (CC) [1]
19435 // parameters[1] : line strength scale factor (CL) [1]
19436 // parameters[2] : line broadening scale factor (CW) [1]
19437 // f_grid : [Hz]
19438 // abs_p : [Pa]
19439 // abs_t : [K]
19440 // vmr : [1]
19441 //
19442 const int Nparam = 3;
19443 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19444 {
19445 out3 << "Full model " << name << " is running with \n"
19446 << "user defined parameters according to model " << model << ".\n";
19447 PWR98H2OAbsModel( pxsec,
19448 parameters[0],
19449 parameters[1],
19450 parameters[2],
19451 model,
19452 f_grid,
19453 abs_p,
19454 abs_t,
19455 vmr,
19456 verbosity );
19457 }
19458 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19459 {
19460 ostringstream os;
19461 os << "Full model " << name << " requires " << Nparam << " input\n"
19462 << "parameters for the model " << model << ",\n"
19463 << "but you specified " << parameters.nelem() << " parameters.\n";
19464 throw runtime_error(os.str());
19465 }
19466 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19467 {
19468 out3 << "Full model " << name << " running with \n"
19469 << "the parameters for model " << model << ".\n";
19470 PWR98H2OAbsModel( pxsec,
19471 0.00,
19472 0.00,
19473 0.00,
19474 model,
19475 f_grid,
19476 abs_p,
19477 abs_t,
19478 vmr,
19479 verbosity );
19480 }
19481 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19482 {
19483 ostringstream os;
19484 os << "ERROR: Full model " << name << " requires NO input\n"
19485 << "parameters for the model " << model << ",\n"
19486 << "but you specified " << parameters.nelem() << " parameters.\n"
19487 << "This ambiguity can not be solved by arts.\n"
19488 << "Please see the arts user guide chapter 3.\n";
19489 throw runtime_error(os.str());
19490 }
19491 }
19492 // ============= O2 continuum =========================================================
19493 else if ( "O2-CIAfunCKDMT100"==name )
19494 {
19495 // Model reference:
19496 // F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
19497 // J.-M. Hartmann, Ch. Boulet,
19498 // "Infrared collision-induced absorption by O2 near 6.4 microns for
19499 // atmospheric applications: measurements and emprirical modeling",
19500 // Appl. Optics, 35, 5911-5917, (1996).
19501 //
19502 // specific continuum parameters and units:
19503 // OUTPUT
19504 // pxsec : [1/m],
19505 // INPUT
19506 // parameters[0] : continuum scaling
19507 // model : model option ("CKD" or "user")
19508 // f_grid : [Hz]
19509 // abs_p : [Pa]
19510 // abs_t : [K]
19511 // vmr : [1]
19512 //
19513 const int Nparam = 1;
19514 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19515 {
19516 out3 << "Continuum model " << name << " is running with \n"
19517 << "user defined parameters according to model " << model << ".\n";
19518 CKD_mt_CIAfun_o2( pxsec,
19519 parameters[0],
19520 model,
19521 f_grid,
19522 abs_p,
19523 abs_t,
19524 vmr,
19525 verbosity );
19526 }
19527 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19528 {
19529 ostringstream os;
19530 os << "Continuum model " << name << " requires " << Nparam << " input\n"
19531 << "parameters for the model " << model << ",\n"
19532 << "but you specified " << parameters.nelem() << " parameters.\n";
19533 throw runtime_error(os.str());
19534 }
19535 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19536 {
19537 out3 << "Continuum model " << name << " running with \n"
19538 << "the parameters for model " << model << ".\n";
19539 CKD_mt_CIAfun_o2( pxsec,
19540 0.00e0,
19541 model,
19542 f_grid,
19543 abs_p,
19544 abs_t,
19545 vmr,
19546 verbosity );
19547 }
19548 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19549 {
19550 ostringstream os;
19551 os << "ERROR: Continuum model " << name << " requires NO input\n"
19552 << "parameters for the model " << model << ",\n"
19553 << "but you specified " << parameters.nelem() << " parameters.\n"
19554 << "This ambiguity can not be solved by arts.\n"
19555 << "Please see the arts user guide chapter 3.\n";
19556 throw runtime_error(os.str());
19557 }
19558 }
19559 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19560 else if ( "O2-v0v0CKDMT100"==name )
19561 {
19562 // Model reference:
19563 // B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
19564 // "Absolute Intensities for the O2 1.27 micron
19565 // continuum absorption",
19566 // J. Geophys. Res., 104, 30,585-30,590, 1999.
19567 //
19568 // specific continuum parameters and units:
19569 // OUTPUT
19570 // pxsec : [1/m],
19571 // INPUT
19572 // parameters[0] : continuum scaling
19573 // model : model option ("CKD" or "user")
19574 // f_grid : [Hz]
19575 // abs_p : [Pa]
19576 // abs_t : [K]
19577 // vmr : [1]
19578 // abs_n2 : [1]
19579 //
19580
19581 if( abs_n2.sum() < -1. )
19582 {
19583 ostringstream os;
19584 os << "Continuum/full model tag " << name
19585 << " requires N2-vmr, but no tag group contains N2!";
19586 throw runtime_error(os.str());
19587 }
19588
19589 const int Nparam = 1;
19590 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19591 {
19592 out3 << "Continuum model " << name << " is running with \n"
19593 << "user defined parameters according to model " << model << ".\n";
19594 CKD_mt_v0v0_o2( pxsec,
19595 parameters[0],
19596 model,
19597 f_grid,
19598 abs_p,
19599 abs_t,
19600 vmr,
19601 abs_n2,
19602 verbosity );
19603 }
19604 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19605 {
19606 ostringstream os;
19607 os << "Continuum model " << name << " requires " << Nparam << " input\n"
19608 << "parameters for the model " << model << ",\n"
19609 << "but you specified " << parameters.nelem() << " parameters.\n";
19610 throw runtime_error(os.str());
19611 }
19612 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19613 {
19614 out3 << "Continuum model " << name << " running with \n"
19615 << "the parameters for model " << model << ".\n";
19616 CKD_mt_v0v0_o2( pxsec,
19617 0.0e0,
19618 model,
19619 f_grid,
19620 abs_p,
19621 abs_t,
19622 vmr,
19623 abs_n2,
19624 verbosity );
19625 }
19626 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19627 {
19628 ostringstream os;
19629 os << "ERROR: Continuum model " << name << " requires NO input\n"
19630 << "parameters for the model " << model << ",\n"
19631 << "but you specified " << parameters.nelem() << " parameters.\n"
19632 << "This ambiguity can not be solved by arts.\n"
19633 << "Please see the arts user guide chapter 3.\n";
19634 throw runtime_error(os.str());
19635 }
19636 }
19637 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19638 else if ( "O2-v1v0CKDMT100"==name )
19639 {
19640 // Model reference:
19641 // Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,
19642 // "Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands",
19643 // Journal of Geophysical Research, vol 103, no. D4, pp. 3859-3863, 1998.
19644 //
19645 // specific continuum parameters and units:
19646 // OUTPUT
19647 // pxsec : [1/m],
19648 // INPUT
19649 // parameters[0] : continuum scaling
19650 // model : model option ("CKD" or "user")
19651 // f_grid : [Hz]
19652 // abs_p : [Pa]
19653 // abs_t : [K]
19654 // vmr : [1]
19655 //
19656 const int Nparam = 1;
19657 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19658 {
19659 out3 << "Continuum model " << name << " is running with \n"
19660 << "user defined parameters according to model " << model << ".\n";
19661 CKD_mt_v1v0_o2( pxsec,
19662 parameters[0],
19663 model,
19664 f_grid,
19665 abs_p,
19666 abs_t,
19667 vmr,
19668 verbosity );
19669 }
19670 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19671 {
19672 ostringstream os;
19673 os << "Continuum model " << name << " requires " << Nparam << " input\n"
19674 << "parameters for the model " << model << ",\n"
19675 << "but you specified " << parameters.nelem() << " parameters.\n";
19676 throw runtime_error(os.str());
19677 }
19678 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19679 {
19680 out3 << "Continuum model " << name << " running with \n"
19681 << "the parameters for model " << model << ".\n";
19682 CKD_mt_v1v0_o2( pxsec,
19683 0.0e0,
19684 model,
19685 f_grid,
19686 abs_p,
19687 abs_t,
19688 vmr,
19689 verbosity );
19690 }
19691 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19692 {
19693 ostringstream os;
19694 os << "ERROR: Continuum model " << name << " requires NO input\n"
19695 << "parameters for the model " << model << ",\n"
19696 << "but you specified " << parameters.nelem() << " parameters.\n"
19697 << "This ambiguity can not be solved by arts.\n"
19698 << "Please see the ARTS User Guide.\n";
19699 throw runtime_error(os.str());
19700 }
19701 }
19702
19703 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19704 else if ( "O2-visCKDMT252"==name )
19705 {
19706 // Model reference:
19707 // O2 continuum formulated by Greenblatt et al. over the spectral region
19708 // 8797-29870 cm-1: "Absorption Coefficients of Oxygen Between
19709 // 330 and 1140 nm, G.D. Green blatt, J.J. Orlando, J.B. Burkholder,
19710 // and A.R. Ravishabkara, J. Geophys. Res., 95, 18577-18582, 1990.
19711 //
19712 // specific continuum parameters and units:
19713 // OUTPUT
19714 // pxsec : [1/m],
19715 // INPUT
19716 // parameters[0] : continuum scaling
19717 // model : model option ("CKD" or "user")
19718 // f_grid : [Hz]
19719 // abs_p : [Pa]
19720 // abs_t : [K]
19721 // vmr : [1]
19722 //
19723 const int Nparam = 1;
19724 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19725 {
19726 out3 << "Continuum model " << name << " is running with \n"
19727 << "user defined parameters according to model " << model << ".\n";
19728 CKD_mt_250_o2_vis( pxsec,
19729 parameters[0],
19730 model,
19731 f_grid,
19732 abs_p,
19733 abs_t,
19734 vmr,
19735 verbosity );
19736 }
19737 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19738 {
19739 ostringstream os;
19740 os << "Continuum model " << name << " requires " << Nparam << " input\n"
19741 << "parameters for the model " << model << ",\n"
19742 << "but you specified " << parameters.nelem() << " parameters.\n";
19743 throw runtime_error(os.str());
19744 }
19745 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19746 {
19747 out3 << "Continuum model " << name << " running with \n"
19748 << "the parameters for model " << model << ".\n";
19749 CKD_mt_250_o2_vis( pxsec,
19750 0.0e0,
19751 model,
19752 f_grid,
19753 abs_p,
19754 abs_t,
19755 vmr,
19756 verbosity );
19757 }
19758 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19759 {
19760 ostringstream os;
19761 os << "ERROR: Continuum model " << name << " requires NO input\n"
19762 << "parameters for the model " << model << ",\n"
19763 << "but you specified " << parameters.nelem() << " parameters.\n"
19764 << "This ambiguity can not be solved by arts.\n"
19765 << "Please see the arts user guide chapter 3.\n";
19766 throw runtime_error(os.str());
19767 }
19768 }
19769
19770 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19771
19772 else if ( "O2-SelfContStandardType"==name )
19773 {
19774 // MPM93, Rosenkranz 1993 O2 continuum:
19775 // see publication side of National Telecommunications and Information Administration
19776 // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
19777 // and ftp side for downloading the MPM93 original source code:
19778 // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
19779 //
19780 // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
19781 // "Atmospheric Remote Sensing by Microwave Radiometry",
19782 // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
19783 // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992)
19784 //
19785 // specific continuum parameters and units:
19786 // OUTPUT
19787 // pxsec : [1/m],
19788 // INPUT
19789 // parameters[0] : continuum coefficient (C) [1/m*1/Hz*1/Pa]
19790 // parameters[1] : frequency coefficient (G0) [Hz/Pa]
19791 // parameters[3] : line width parameter (G0A) [1]
19792 // parameters[3] : line width parameter (G0B) [1]
19793 // parameters[2] : temperature exponent (XG0d) [1]
19794 // parameters[2] : temperature exponent (x_s) [1]
19795 // parameters[5] : continuum coefficient (XG0w) [1]
19796 // model : model option ("MPM93", "Rosenkranz", or "user")
19797 // f_grid : [Hz]
19798 // abs_p : [Pa]
19799 // abs_t : [K]
19800 // abs_h2o : [1]
19801 // vmr : [1]
19802 //
19803
19804 if( abs_h2o.sum() < -1. )
19805 {
19806 ostringstream os;
19807 os << "Continuum/full model tag " << name
19808 << " requires H2O-vmr, but no tag group contains H2O!";
19809 throw runtime_error(os.str());
19810 }
19811
19812 const int Nparam = 6;
19813 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19814 {
19815 out3 << "Continuum model " << name << " is running with \n"
19816 << "user defined parameters according to model " << model << ".\n";
19817 Standard_O2_continuum( pxsec,
19818 parameters[0],
19819 parameters[1],
19820 parameters[2],
19821 parameters[3],
19822 parameters[4],
19823 parameters[5],
19824 model,
19825 f_grid,
19826 abs_p,
19827 abs_t,
19828 abs_h2o,
19829 vmr,
19830 verbosity );
19831 }
19832 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19833 {
19834 ostringstream os;
19835 os << "Continuum model " << name << " requires " << Nparam << " input\n"
19836 << "parameters for the model " << model << ",\n"
19837 << "but you specified " << parameters.nelem() << " parameters.\n";
19838 throw runtime_error(os.str());
19839 }
19840 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19841 {
19842 out3 << "Continuum model " << name << " running with \n"
19843 << "the parameters for model " << model << ".\n";
19844 Standard_O2_continuum( pxsec,
19845 0.00,
19846 0.00,
19847 0.00,
19848 0.00,
19849 0.00,
19850 0.00,
19851 model,
19852 f_grid,
19853 abs_p,
19854 abs_t,
19855 abs_h2o,
19856 vmr,
19857 verbosity );
19858 }
19859 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19860 {
19861 ostringstream os;
19862 os << "ERROR: Continuum model " << name << " requires NO input\n"
19863 << "parameters for the model " << model << ",\n"
19864 << "but you specified " << parameters.nelem() << " parameters.\n"
19865 << "This ambiguity can not be solved by arts.\n"
19866 << "Please see the arts user guide chapter 3.\n";
19867 throw runtime_error(os.str());
19868 }
19869 }
19870 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19871 else if ( "O2-SelfContMPM93"==name )
19872 {
19873 // MPM93 O2 continuum:
19874 // see publication side of National Telecommunications and Information Administration
19875 // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
19876 // and ftp side for downloading the MPM93 original source code:
19877 // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
19878
19879 //
19880 // specific continuum parameters and units:
19881 // OUTPUT
19882 // pxsec : [1/m],
19883 // INPUT
19884 // parameters[0] : continuum coefficient (C) [1/m / (Hz²*Pa²)]
19885 // parameters[1] : temperature exponent (x_s) [1]
19886 // f_grid : [Hz]
19887 // abs_p : [Pa]
19888 // abs_t : [K]
19889 // abs_h2o : [1]
19890 // vmr : [1]
19891 //
19892
19893 if( abs_h2o.sum() < -1. )
19894 {
19895 ostringstream os;
19896 os << "Continuum/full model tag " << name
19897 << " requires H2O-vmr, but no tag group contains H2O!";
19898 throw runtime_error(os.str());
19899 }
19900
19901 const int Nparam = 4;
19902 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19903 {
19904 out3 << "Continuum model " << name << " is running with \n"
19905 << "user defined parameters according to model " << model << ".\n";
19906 MPM93_O2_continuum( pxsec,
19907 parameters[0],
19908 parameters[1],
19909 parameters[2],
19910 parameters[3],
19911 model,
19912 f_grid,
19913 abs_p,
19914 abs_t,
19915 abs_h2o,
19916 vmr,
19917 verbosity );
19918 }
19919 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
19920 {
19921 ostringstream os;
19922 os << "Continuum model " << name << " requires " << Nparam << " input\n"
19923 << "parameters for the model " << model << ",\n"
19924 << "but you specified " << parameters.nelem() << " parameters.\n";
19925 throw runtime_error(os.str());
19926 }
19927 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
19928 {
19929 out3 << "Continuum model " << name << " running with \n"
19930 << "the parameters for model " << model << ".\n";
19931 MPM93_O2_continuum( pxsec,
19932 0.00,
19933 0.00,
19934 0.00,
19935 0.00,
19936 model,
19937 f_grid,
19938 abs_p,
19939 abs_t,
19940 abs_h2o,
19941 vmr,
19942 verbosity );
19943 }
19944 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
19945 {
19946 ostringstream os;
19947 os << "ERROR: Continuum model " << name << " requires NO input\n"
19948 << "parameters for the model " << model << ",\n"
19949 << "but you specified " << parameters.nelem() << " parameters.\n"
19950 << "This ambiguity can not be solved by arts.\n"
19951 << "Please see the arts user guide chapter 3.\n";
19952 throw runtime_error(os.str());
19953 }
19954 }
19955 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19956 else if ( "O2-SelfContPWR93"==name )
19957 {
19958 // data information about this continuum:
19959 // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
19960 // "Atmospheric Remote Sensing by Microwave Radiometry",
19961 // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
19962 // (see also JQSRT, Vol.48, No.5/6 pp.629-643, 1992)
19963 //
19964 // specific continuum parameters and units:
19965 // OUTPUT
19966 // pxsec : [1/m],
19967 // INPUT
19968 // parameters[0] : continuum coefficient (C) [K²/(Hz*Pa*m)]
19969 // parameters[1] : temperature exponent (x) [1]
19970 // f_grid : [Hz]
19971 // abs_p : [Pa]
19972 // abs_t : [K]
19973 // vmr : [1]
19974 //
19975
19976 if( abs_h2o.sum() < -1. )
19977 {
19978 ostringstream os;
19979 os << "Continuum/full model tag " << name
19980 << " requires H2O-vmr, but no tag group contains H2O!";
19981 throw runtime_error(os.str());
19982 }
19983
19984 const int Nparam = 4;
19985 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
19986 {
19987 out3 << "Continuum model " << name << " is running with \n"
19988 << "user defined parameters according to model " << model << ".\n";
19989 Rosenkranz_O2_continuum( pxsec,
19990 parameters[0],
19991 parameters[1],
19992 parameters[2],
19993 parameters[3],
19994 model,
19995 f_grid,
19996 abs_p,
19997 abs_t,
19998 abs_h2o,
19999 vmr,
20000 verbosity );
20001 }
20002 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20003 {
20004 ostringstream os;
20005 os << "Continuum model " << name << " requires " << Nparam << " input\n"
20006 << "parameters for the model " << model << ",\n"
20007 << "but you specified " << parameters.nelem() << " parameters.\n";
20008 throw runtime_error(os.str());
20009 }
20010 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20011 {
20012 out3 << "Continuum model " << name << " running with \n"
20013 << "the parameters for model " << model << ".\n";
20014 Rosenkranz_O2_continuum( pxsec,
20015 0.00,
20016 0.00,
20017 0.00,
20018 0.00,
20019 model,
20020 f_grid,
20021 abs_p,
20022 abs_t,
20023 abs_h2o,
20024 vmr,
20025 verbosity );
20026 }
20027 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20028 {
20029 ostringstream os;
20030 os << "ERROR: Continuum model " << name << " requires NO input\n"
20031 << "parameters for the model " << model << ",\n"
20032 << "but you specified " << parameters.nelem() << " parameters.\n"
20033 << "This ambiguity can not be solved by arts.\n"
20034 << "Please see the arts user guide chapter 3.\n";
20035 throw runtime_error(os.str());
20036 }
20037 }
20038 // ============= O2 full model ========================================================
20039 else if ( "O2-PWR88"==name )
20040 {
20041 // REFERENCE FOR EQUATIONS AND COEFFICIENTS:
20042 // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING
20043 // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993)
20044 // AND
20045 // H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992)
20046 // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92)
20047 // AND
20048 // P. W. ROSENKRANZ, INTERFERENCE COEFFICIENTS FOR THE
20049 // OVERLAPPING OXYGEN LINES IN AIR, JQSRT, 1988, VOLUME 39, 287-297.
20050 //
20051 // the only difference to the 1993 version is the line mixing
20052 // parameter Y, which is taken from the above reference JQSRT, 1988.
20053 //
20054 // specific continuum parameters and units:
20055 // OUTPUT
20056 // pxsec : [1/m],
20057 // INPUT
20058 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20059 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20060 // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
20061 // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
20062 // f_grid : [Hz]
20063 // abs_p : [Pa]
20064 // abs_t : [K]
20065 // abs_h2o, : [1]
20066 // vmr : [1]
20067 //
20068
20069 if( abs_h2o.sum() < -1. )
20070 {
20071 ostringstream os;
20072 os << "Continuum/full model tag " << name
20073 << " requires H2O-vmr, but no tag group contains H2O!";
20074 throw runtime_error(os.str());
20075 }
20076
20077 const int Nparam = 4;
20078 const char *version="PWR88";
20079 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20080 {
20081 out3 << "Full model " << name << " is running with \n"
20082 << "user defined parameters according to model " << model << ".\n";
20083 PWR93O2AbsModel( pxsec,
20084 parameters[0], // continuum term scale factor
20085 parameters[1], // line strength scale factor
20086 parameters[2], // line broadening scale factor
20087 parameters[3], // line coupling scale factor
20088 model,
20089 version,
20090 f_grid,
20091 abs_p,
20092 abs_t,
20093 abs_h2o,
20094 vmr,
20095 verbosity );
20096 }
20097 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20098 {
20099 ostringstream os;
20100 os << "Full model " << name << " requires " << Nparam << " input\n"
20101 << "parameters for the model " << model << ",\n"
20102 << "but you specified " << parameters.nelem() << " parameters.\n";
20103 throw runtime_error(os.str());
20104 }
20105 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20106 {
20107 out3 << "Full model " << name << " running with \n"
20108 << "the parameters for model " << model << ".\n";
20109 PWR93O2AbsModel( pxsec,
20110 0.00,
20111 0.00,
20112 0.00,
20113 0.00,
20114 model,
20115 version,
20116 f_grid,
20117 abs_p,
20118 abs_t,
20119 abs_h2o,
20120 vmr,
20121 verbosity );
20122 }
20123 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20124 {
20125 ostringstream os;
20126 os << "ERROR: Full model " << name << " requires NO input\n"
20127 << "parameters for the model " << model << ",\n"
20128 << "but you specified " << parameters.nelem() << " parameters.\n"
20129 << "This ambiguity can not be solved by arts.\n"
20130 << "Please see the arts user guide chapter 3.\n";
20131 throw runtime_error(os.str());
20132 }
20133 }
20134 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20135 else if ( "O2-PWR93"==name )
20136 {
20137 // REFERENCE FOR EQUATIONS AND COEFFICIENTS:
20138 // P.W. ROSENKRANZ, CHAP. 2 AND APPENDIX, IN ATMOSPHERIC REMOTE SENSING
20139 // BY MICROWAVE RADIOMETRY (M.A. JANSSEN, ED. 1993)
20140 // AND H.J. LIEBE ET AL, JQSRT V.48, PP.629-643 (1992)
20141 // (EXCEPT: SUBMILLIMETER LINE INTENSITIES FROM HITRAN92)
20142 //
20143 // specific continuum parameters and units:
20144 // OUTPUT
20145 // pxsec : [1/m],
20146 // INPUT
20147 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20148 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20149 // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
20150 // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
20151 // f_grid : [Hz]
20152 // abs_p : [Pa]
20153 // abs_t : [K]
20154 // abs_h2o, : [1]
20155 // vmr : [1]
20156 //
20157
20158 if( abs_h2o.sum() < -1. )
20159 {
20160 ostringstream os;
20161 os << "Continuum/full model tag " << name
20162 << " requires H2O-vmr, but no tag group contains H2O!";
20163 throw runtime_error(os.str());
20164 }
20165
20166 const int Nparam = 4;
20167 const char *version="PWR93";
20168 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20169 {
20170 out3 << "Full model " << name << " is running with \n"
20171 << "user defined parameters according to model " << model << ".\n";
20172 PWR93O2AbsModel( pxsec,
20173 parameters[0], // continuum term scale factor
20174 parameters[1], // line strength scale factor
20175 parameters[2], // line broadening scale factor
20176 parameters[3], // line coupling scale factor
20177 model,
20178 version,
20179 f_grid,
20180 abs_p,
20181 abs_t,
20182 abs_h2o,
20183 vmr,
20184 verbosity );
20185 }
20186 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20187 {
20188 ostringstream os;
20189 os << "Full model " << name << " requires " << Nparam << " input\n"
20190 << "parameters for the model " << model << ",\n"
20191 << "but you specified " << parameters.nelem() << " parameters.\n";
20192 throw runtime_error(os.str());
20193 }
20194 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20195 {
20196 out3 << "Full model " << name << " running with \n"
20197 << "the parameters for model " << model << ".\n";
20198 PWR93O2AbsModel( pxsec,
20199 0.00,
20200 0.00,
20201 0.00,
20202 0.00,
20203 model,
20204 version,
20205 f_grid,
20206 abs_p,
20207 abs_t,
20208 abs_h2o,
20209 vmr,
20210 verbosity );
20211 }
20212 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20213 {
20214 ostringstream os;
20215 os << "ERROR: Full model " << name << " requires NO input\n"
20216 << "parameters for the model " << model << ",\n"
20217 << "but you specified " << parameters.nelem() << " parameters.\n"
20218 << "This ambiguity can not be solved by arts.\n"
20219 << "Please see the arts user guide chapter 3.\n";
20220 throw runtime_error(os.str());
20221 }
20222 }
20223 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20224 else if ( "O2-PWR98"==name )
20225 {
20226 // REFERENCES FOR EQUATIONS AND COEFFICIENTS:
20227 // P.W. Rosenkranz, CHAP. 2 and appendix, in ATMOSPHERIC REMOTE SENSING
20228 // BY MICROWAVE RADIOMETRY (M.A. Janssen, ed., 1993).
20229 // H.J. Liebe et al, JQSRT V.48, PP.629-643 (1992).
20230 // M.J. Schwartz, Ph.D. thesis, M.I.T. (1997).
20231 // SUBMILLIMETER LINE INTENSITIES FROM HITRAN96.
20232 // This version differs from Liebe's MPM92 in two significant respects:
20233 // 1. It uses the modification of the 1- line width temperature dependence
20234 // recommended by Schwartz: (1/T).
20235 // 2. It uses the same temperature dependence (X) for submillimeter
20236 // line widths as in the 60 GHz band: (1/T)**0.8
20237 //
20238 // specific continuum parameters and units:
20239 // OUTPUT
20240 // pxsec : [1/m],
20241 // INPUT
20242 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20243 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20244 // parameters[1] : line broadening scale factor, default CW = 1.000 [1]
20245 // parameters[1] : line coupling scale factor, default CO = 1.000 [1]
20246 // f_grid : [Hz]
20247 // abs_p : [Pa]
20248 // abs_t : [K]
20249 // abs_h2o, : [1]
20250 // vmr : [1]
20251 //
20252
20253 // abs_h2o needed here. check, whether this is valid.
20254 if( abs_h2o.sum() < -1. )
20255 {
20256 ostringstream os;
20257 os << "Continuum/full model tag " << name << " requires H2O-vmr, but no tag group contains H2O!";
20258 throw runtime_error(os.str());
20259 }
20260
20261 const int Nparam = 4;
20262 const char *version="PWR98";
20263 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20264 {
20265 out3 << "Full model " << name << " is running with \n"
20266 << "user defined parameters according to model " << model << ".\n";
20267 PWR93O2AbsModel( pxsec,
20268 parameters[0], // continuum term scale factor
20269 parameters[1], // line strength scale factor
20270 parameters[2], // line broadening scale factor
20271 parameters[3], // line coupling scale factor
20272 model,
20273 version,
20274 f_grid,
20275 abs_p,
20276 abs_t,
20277 abs_h2o,
20278 vmr,
20279 verbosity );
20280 }
20281 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20282 {
20283 ostringstream os;
20284 os << "Full model " << name << " requires " << Nparam << " input\n"
20285 << "parameters for the model " << model << ",\n"
20286 << "but you specified " << parameters.nelem() << " parameters.\n";
20287 throw runtime_error(os.str());
20288 }
20289 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20290 {
20291 out3 << "Full model " << name << " running with \n"
20292 << "the parameters for model " << model << ".\n";
20293 PWR93O2AbsModel( pxsec,
20294 0.00,
20295 0.00,
20296 0.00,
20297 0.00,
20298 model,
20299 version,
20300 f_grid,
20301 abs_p,
20302 abs_t,
20303 abs_h2o,
20304 vmr,
20305 verbosity );
20306 }
20307 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20308 {
20309 ostringstream os;
20310 os << "ERROR: Full model " << name << " requires NO input\n"
20311 << "parameters for the model " << model << ",\n"
20312 << "but you specified " << parameters.nelem() << " parameters.\n"
20313 << "This ambiguity can not be solved by arts.\n"
20314 << "Please see the arts user guide chapter 3.\n";
20315 throw runtime_error(os.str());
20316 }
20317 }
20318 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20319 else if ( "O2-MPM93"==name )
20320 {
20321 // H. J. Liebe and G. A. Hufford and M. G. Cotton,
20322 // "Propagation modeling of moist air and suspended water/ice
20323 // particles at frequencies below 1000 GHz",
20324 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
20325 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
20326 //
20327 // specific continuum parameters and units:
20328 // OUTPUT
20329 // pxsec : [1/m],
20330 // INPUT
20331 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20332 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20333 // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
20334 // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
20335 // f_grid : [Hz]
20336 // abs_p : [Pa]
20337 // abs_t : [K]
20338 // abs_h2o, : [1]
20339 // vmr : [1]
20340 //
20341
20342 if( abs_h2o.sum() < -1. )
20343 {
20344 ostringstream os;
20345 os << "Continuum/full model tag " << name
20346 << " requires H2O-vmr, but no tag group contains H2O!";
20347 throw runtime_error(os.str());
20348 }
20349
20350 const int Nparam = 4;
20351 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20352 {
20353 out3 << "Full model " << name << " is running with \n"
20354 << "user defined parameters according to model " << model << ".\n";
20355 MPM93O2AbsModel( pxsec,
20356 parameters[0], // continuum term scale factor
20357 parameters[1], // line strength scale factor
20358 parameters[2], // line broadening scale factor
20359 parameters[3], // line coupling scale factor
20360 model,
20361 f_grid,
20362 abs_p,
20363 abs_t,
20364 abs_h2o,
20365 vmr,
20366 verbosity );
20367 }
20368 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20369 {
20370 ostringstream os;
20371 os << "Full model " << name << " requires " << Nparam << " input\n"
20372 << "parameters for the model " << model << ",\n"
20373 << "but you specified " << parameters.nelem() << " parameters.\n";
20374 throw runtime_error(os.str());
20375 }
20376 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20377 {
20378 out3 << "Full model " << name << " running with \n"
20379 << "the parameters for model " << model << ".\n";
20380 MPM93O2AbsModel( pxsec,
20381 0.00,
20382 0.00,
20383 0.00,
20384 0.00,
20385 model,
20386 f_grid,
20387 abs_p,
20388 abs_t,
20389 abs_h2o,
20390 vmr,
20391 verbosity );
20392 }
20393 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20394 {
20395 ostringstream os;
20396 os << "ERROR: Full model " << name << " requires NO input\n"
20397 << "parameters for the model " << model << ",\n"
20398 << "but you specified " << parameters.nelem() << " parameters.\n"
20399 << "This ambiguity can not be solved by arts.\n"
20400 << "Please see the arts user guide chapter 3.\n";
20401 throw runtime_error(os.str());
20402 }
20403 }
20404 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20405 else if ( "O2-TRE05"==name )
20406 {
20407 // H. J. Liebe and G. A. Hufford and M. G. Cotton,
20408 // "Propagation modeling of moist air and suspended water/ice
20409 // particles at frequencies below 1000 GHz",
20410 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
20411 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
20412 //
20413 // specific continuum parameters and units:
20414 // OUTPUT
20415 // pxsec : [1/m],
20416 // INPUT
20417 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20418 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20419 // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
20420 // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
20421 // f_grid : [Hz]
20422 // abs_p : [Pa]
20423 // abs_t : [K]
20424 // abs_h2o, : [1]
20425 // vmr : [1]
20426 //
20427
20428 if( abs_h2o.sum() < -1. )
20429 {
20430 ostringstream os;
20431 os << "Continuum/full model tag " << name
20432 << " requires H2O-vmr, but no tag group contains H2O!";
20433 throw runtime_error(os.str());
20434 }
20435
20436 const int Nparam = 4;
20437 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20438 {
20439 out3 << "Full model " << name << " is running with \n"
20440 << "user defined parameters according to model " << model << ".\n";
20441 TRE05O2AbsModel( pxsec,
20442 parameters[0], // continuum term scale factor
20443 parameters[1], // line strength scale factor
20444 parameters[2], // line broadening scale factor
20445 parameters[3], // line coupling scale factor
20446 model,
20447 f_grid,
20448 abs_p,
20449 abs_t,
20450 abs_h2o,
20451 vmr,
20452 verbosity );
20453 }
20454 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20455 {
20456 ostringstream os;
20457 os << "Full model " << name << " requires " << Nparam << " input\n"
20458 << "parameters for the model " << model << ",\n"
20459 << "but you specified " << parameters.nelem() << " parameters.\n";
20460 throw runtime_error(os.str());
20461 }
20462 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20463 {
20464 out3 << "Full model " << name << " running with \n"
20465 << "the parameters for model " << model << ".\n";
20466 TRE05O2AbsModel( pxsec,
20467 0.00,
20468 0.00,
20469 0.00,
20470 0.00,
20471 model,
20472 f_grid,
20473 abs_p,
20474 abs_t,
20475 abs_h2o,
20476 vmr,
20477 verbosity );
20478 }
20479 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20480 {
20481 ostringstream os;
20482 os << "ERROR: Full model " << name << " requires NO input\n"
20483 << "parameters for the model " << model << ",\n"
20484 << "but you specified " << parameters.nelem() << " parameters.\n"
20485 << "This ambiguity can not be solved by arts.\n"
20486 << "Please see the arts user guide chapter 3.\n";
20487 throw runtime_error(os.str());
20488 }
20489 }
20490 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20491 else if ( "O2-MPM92"==name )
20492 {
20493 // H. J. Liebe, P. W. Rosenkranz and G. A. Hufford,
20494 // Atmospheric 60-GHz Oxygen Spectrum: New Laboratory
20495 // Measurements and Line Parameters
20496 // JQSRT, Vol 48, pp. 629-643, 1992
20497 //
20498 // specific continuum parameters and units:
20499 // OUTPUT
20500 // pxsec : [1/m],
20501 // INPUT
20502 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20503 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20504 // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
20505 // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
20506 // f_grid : [Hz]
20507 // abs_p : [Pa]
20508 // abs_t : [K]
20509 // abs_h2o, : [1]
20510 // vmr : [1]
20511 //
20512
20513 if( abs_h2o.sum() < -1. )
20514 {
20515 ostringstream os;
20516 os << "Continuum/full model tag " << name
20517 << " requires H2O-vmr, but no tag group contains H2O!";
20518 throw runtime_error(os.str());
20519 }
20520
20521 const int Nparam = 4;
20522 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20523 {
20524 out3 << "Full model " << name << " is running with \n"
20525 << "user defined parameters according to model " << model << ".\n";
20526 MPM92O2AbsModel( pxsec,
20527 parameters[0], // continuum term scale factor
20528 parameters[1], // line strength scale factor
20529 parameters[2], // line broadening scale factor
20530 parameters[3], // line coupling scale factor
20531 model,
20532 f_grid,
20533 abs_p,
20534 abs_t,
20535 abs_h2o,
20536 vmr,
20537 verbosity );
20538 }
20539 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20540 {
20541 ostringstream os;
20542 os << "Full model " << name << " requires " << Nparam << " input\n"
20543 << "parameters for the model " << model << ",\n"
20544 << "but you specified " << parameters.nelem() << " parameters.\n";
20545 throw runtime_error(os.str());
20546 }
20547 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20548 {
20549 out3 << "Full model " << name << " running with \n"
20550 << "the parameters for model " << model << ".\n";
20551 MPM92O2AbsModel( pxsec,
20552 0.00,
20553 0.00,
20554 0.00,
20555 0.00,
20556 model,
20557 f_grid,
20558 abs_p,
20559 abs_t,
20560 abs_h2o,
20561 vmr,
20562 verbosity );
20563 }
20564 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20565 {
20566 ostringstream os;
20567 os << "ERROR: Full model " << name << " requires NO input\n"
20568 << "parameters for the model " << model << ",\n"
20569 << "but you specified " << parameters.nelem() << " parameters.\n"
20570 << "This ambiguity can not be solved by arts.\n"
20571 << "Please see the arts user guide chapter 3.\n";
20572 throw runtime_error(os.str());
20573 }
20574 }
20575 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20576 else if ( "O2-MPM89"==name )
20577 {
20578 // H. J. Liebe,
20579 // MPM - an atmospheric millimeter-wave propagation model,
20580 // Int. J. Infrared and Mill. Waves, Vol 10, pp. 631-650, 1989.
20581 //
20582 // specific continuum parameters and units:
20583 // OUTPUT
20584 // pxsec : [1/m],
20585 // INPUT
20586 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20587 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20588 // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
20589 // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
20590 // f_grid : [Hz]
20591 // abs_p : [Pa]
20592 // abs_t : [K]
20593 // abs_h2o, : [1]
20594 // vmr : [1]
20595 //
20596
20597 if( abs_h2o.sum() < -1. )
20598 {
20599 ostringstream os;
20600 os << "Continuum/full model tag " << name
20601 << " requires H2O-vmr, but no tag group contains H2O!";
20602 throw runtime_error(os.str());
20603 }
20604
20605 const int Nparam = 4;
20606 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20607 {
20608 out3 << "Full model " << name << " is running with \n"
20609 << "user defined parameters according to model " << model << ".\n";
20610 MPM89O2AbsModel( pxsec,
20611 parameters[0], // continuum term scale factor
20612 parameters[1], // line strength scale factor
20613 parameters[2], // line broadening scale factor
20614 parameters[3], // line coupling scale factor
20615 model,
20616 f_grid,
20617 abs_p,
20618 abs_t,
20619 abs_h2o,
20620 vmr,
20621 verbosity );
20622 }
20623 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20624 {
20625 ostringstream os;
20626 os << "Full model " << name << " requires " << Nparam << " input\n"
20627 << "parameters for the model " << model << ",\n"
20628 << "but you specified " << parameters.nelem() << " parameters.\n";
20629 throw runtime_error(os.str());
20630 }
20631 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20632 {
20633 out3 << "Full model " << name << " running with \n"
20634 << "the parameters for model " << model << ".\n";
20635 MPM89O2AbsModel( pxsec,
20636 0.00,
20637 0.00,
20638 0.00,
20639 0.00,
20640 model,
20641 f_grid,
20642 abs_p,
20643 abs_t,
20644 abs_h2o,
20645 vmr,
20646 verbosity );
20647 }
20648 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20649 {
20650 ostringstream os;
20651 os << "ERROR: Full model " << name << " requires NO input\n"
20652 << "parameters for the model " << model << ",\n"
20653 << "but you specified " << parameters.nelem() << " parameters.\n"
20654 << "This ambiguity can not be solved by arts.\n"
20655 << "Please see the arts user guide chapter 3.\n";
20656 throw runtime_error(os.str());
20657 }
20658 }
20659 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20660 else if ( "O2-MPM87"==name )
20661 {
20662 // H. J. Liebe and D. H. Layton,
20663 // Millimeter-wave properties of the atmosphere:
20664 // Laboratory studies and propagation modelling,
20665 // NITA Report 87-224,
20666 // U.S. Dept. of Commerce, National Telecommunications and Information
20667 // Administration, Institute for Communication Sciences, rep. 87-224,
20668 // 325 Broadway, Boulder, CO 80303-3328
20669 //
20670 // specific continuum parameters and units:
20671 // OUTPUT
20672 // pxsec : [1/m],
20673 // INPUT
20674 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20675 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20676 // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
20677 // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
20678 // f_grid : [Hz]
20679 // abs_p : [Pa]
20680 // abs_t : [K]
20681 // abs_h2o, : [1]
20682 // vmr : [1]
20683 //
20684
20685 if( abs_h2o.sum() < -1. )
20686 {
20687 ostringstream os;
20688 os << "Continuum/full model tag " << name
20689 << " requires H2O-vmr, but no tag group contains H2O!";
20690 throw runtime_error(os.str());
20691 }
20692
20693 const int Nparam = 4;
20694 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20695 {
20696 out3 << "Full model " << name << " is running with \n"
20697 << "user defined parameters according to model " << model << ".\n";
20698 MPM87O2AbsModel( pxsec,
20699 parameters[0], // continuum term scale factor
20700 parameters[1], // line strength scale factor
20701 parameters[2], // line broadening scale factor
20702 parameters[3], // line coupling scale factor
20703 model,
20704 f_grid,
20705 abs_p,
20706 abs_t,
20707 abs_h2o,
20708 vmr,
20709 verbosity );
20710 }
20711 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20712 {
20713 ostringstream os;
20714 os << "Full model " << name << " requires " << Nparam << " input\n"
20715 << "parameters for the model " << model << ",\n"
20716 << "but you specified " << parameters.nelem() << " parameters.\n";
20717 throw runtime_error(os.str());
20718 }
20719 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20720 {
20721 out3 << "Full model " << name << " running with \n"
20722 << "the parameters for model " << model << ".\n";
20723 MPM87O2AbsModel( pxsec,
20724 0.00,
20725 0.00,
20726 0.00,
20727 0.00,
20728 model,
20729 f_grid,
20730 abs_p,
20731 abs_t,
20732 abs_h2o,
20733 vmr,
20734 verbosity );
20735 }
20736 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20737 {
20738 ostringstream os;
20739 os << "ERROR: Full model " << name << " requires NO input\n"
20740 << "parameters for the model " << model << ",\n"
20741 << "but you specified " << parameters.nelem() << " parameters.\n"
20742 << "This ambiguity can not be solved by arts.\n"
20743 << "Please see the arts user guide chapter 3.\n";
20744 throw runtime_error(os.str());
20745 }
20746 }
20747 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20748 else if ( "O2-MPM85"==name )
20749 {
20750 // H. J. Liebe and D. H. Layton,
20751 // An updated model for millimeter wave propagation in moist air
20752 // Radio Science, vol. 20, pp. 1069-1089, 1985
20753 //
20754 // specific continuum parameters and units:
20755 // OUTPUT
20756 // pxsec : [1/m],
20757 // INPUT
20758 // parameters[0] : continuum term scale factor, default CC = 1.000 [1]
20759 // parameters[1] : line strength scale factor, default CL = 1.000 [1]
20760 // parameters[2] : line broadening scale factor, default CW = 1.000 [1]
20761 // parameters[3] : line coupling scale factor, default CO = 1.000 [1]
20762 // f_grid : [Hz]
20763 // abs_p : [Pa]
20764 // abs_t : [K]
20765 // abs_h2o, : [1]
20766 // vmr : [1]
20767 //
20768
20769 if( abs_h2o.sum() < -1. )
20770 {
20771 ostringstream os;
20772 os << "Continuum/full model tag " << name
20773 << " requires H2O-vmr, but no tag group contains H2O!";
20774 throw runtime_error(os.str());
20775 }
20776
20777 const int Nparam = 4;
20778 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20779 {
20780 out3 << "Full model " << name << " is running with \n"
20781 << "user defined parameters according to model " << model << ".\n";
20782 MPM85O2AbsModel( pxsec,
20783 parameters[0], // continuum term scale factor
20784 parameters[1], // line strength scale factor
20785 parameters[2], // line broadening scale factor
20786 parameters[3], // line coupling scale factor
20787 model,
20788 f_grid,
20789 abs_p,
20790 abs_t,
20791 abs_h2o,
20792 vmr,
20793 verbosity );
20794 }
20795 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20796 {
20797 ostringstream os;
20798 os << "Full model " << name << " requires " << Nparam << " input\n"
20799 << "parameters for the model " << model << ",\n"
20800 << "but you specified " << parameters.nelem() << " parameters.\n";
20801 throw runtime_error(os.str());
20802 }
20803 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20804 {
20805 out3 << "Full model " << name << " running with \n"
20806 << "the parameters for model " << model << ".\n";
20807 MPM85O2AbsModel( pxsec,
20808 0.00,
20809 0.00,
20810 0.00,
20811 0.00,
20812 model,
20813 f_grid,
20814 abs_p,
20815 abs_t,
20816 abs_h2o,
20817 vmr,
20818 verbosity );
20819 }
20820 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20821 {
20822 ostringstream os;
20823 os << "ERROR: Full model " << name << " requires NO input\n"
20824 << "parameters for the model " << model << ",\n"
20825 << "but you specified " << parameters.nelem() << " parameters.\n"
20826 << "This ambiguity can not be solved by arts.\n"
20827 << "Please see the arts user guide chapter 3.\n";
20828 throw runtime_error(os.str());
20829 }
20830 }
20831 // ============= N2 continuum =========================================================
20832 else if ( "N2-SelfContMPM93"==name )
20833 {
20834 // MPM93 N2 continuum:
20835 // see publication side of National Telecommunications and Information Administration
20836 // http://www.its.bldrdoc.gov/pub/all_pubs/all_pubs.html
20837 // and ftp side for downloading the MPM93 original source code:
20838 // ftp://ftp.its.bldrdoc.gov/pub/mpm93/
20839 //
20840 // specific continuum parameters and units:
20841 // OUTPUT
20842 // pxsec : [1/m],
20843 // INPUT
20844 // parameters[0] : strength parameter [1/m * 1/(Hz²*Pa²)]
20845 // parameters[1] : broadening parameter [1]
20846 // parameters[2] : temperature exponent [1]
20847 // parameters[3] : frequency exponent [1]
20848 // f_grid : [Hz]
20849 // abs_p : [Pa]
20850 // abs_t : [K]
20851 // abs_h2o : [1]
20852 // vmr : [1]
20853 //
20854
20855 if( abs_h2o.sum() < -1. )
20856 {
20857 ostringstream os;
20858 os << "Continuum/full model tag " << name
20859 << " requires H2O-vmr, but no tag group contains H2O!";
20860 throw runtime_error(os.str());
20861 }
20862
20863 const int Nparam = 4;
20864 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20865 {
20866 out3 << "Continuum model " << name << " is running with \n"
20867 << "user defined parameters according to model " << model << ".\n";
20868 MPM93_N2_continuum( pxsec,
20869 parameters[0],
20870 parameters[1],
20871 parameters[2],
20872 parameters[3],
20873 model,
20874 f_grid,
20875 abs_p,
20876 abs_t,
20877 abs_h2o,
20878 vmr,
20879 verbosity );
20880 }
20881 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20882 {
20883 ostringstream os;
20884 os << "Continuum model " << name << " requires " << Nparam << " input\n"
20885 << "parameters for the model " << model << ",\n"
20886 << "but you specified " << parameters.nelem() << " parameters.\n";
20887 throw runtime_error(os.str());
20888 }
20889 else if ( (model == "MPM93Scale") && (parameters.nelem() == 1) ) // --------------------
20890 {
20891 out3 << "Continuum model " << name << " running with \n"
20892 << "the parameters for model " << model << ".\n";
20893 MPM93_N2_continuum( pxsec,
20894 parameters[0],
20895 0.00,
20896 0.00,
20897 0.00,
20898 model,
20899 f_grid,
20900 abs_p,
20901 abs_t,
20902 abs_h2o,
20903 vmr,
20904 verbosity );
20905 }
20906 else if ( (model == "MPM93Scale") && (parameters.nelem() != 1) ) // --------------------
20907 {
20908 ostringstream os;
20909 os << "Continuum model " << name << " requires 1 scaling input\n"
20910 << "parameters for the model " << model << ",\n"
20911 << "but you specified " << parameters.nelem() << " parameters.\n";
20912 throw runtime_error(os.str());
20913 }
20914 else if ( (model != "user") && (model != "MPM93Scale") && (parameters.nelem() == 0) ) // --
20915 {
20916 out3 << "Continuum model " << name << " running with \n"
20917 << "the parameters for model " << model << ".\n";
20918 MPM93_N2_continuum( pxsec,
20919 0.00,
20920 0.00,
20921 0.00,
20922 0.00,
20923 model,
20924 f_grid,
20925 abs_p,
20926 abs_t,
20927 abs_h2o,
20928 vmr,
20929 verbosity );
20930 }
20931 /* --------------------------------------------------------------------------
20932 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
20933 {
20934 ostringstream os;
20935 os << "ERROR: Continuum model " << name << " requires NO input\n"
20936 << "parameters for the model " << model << ",\n"
20937 << "but you specified " << parameters.nelem() << " parameters.\n"
20938 << "This ambiguity can not be solved by arts.\n"
20939 << "Please see the arts user guide chapter 3.\n";
20940 throw runtime_error(os.str());
20941 }
20942 ----------------------------------------------------------------------*/
20943 }
20944 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20945 else if ( "N2-DryContATM01"==name )
20946 {
20947 // data information about this continuum:
20948 // Pardo et al. model model (IEEE, Trans. Ant. Prop.,
20949 // Vol 49, No 12, pp. 1683-1694, 2001)
20950 //
20951 // specific continuum parameters and units:
20952 // a) output
20953 // pxsec : [1/m],
20954 // b) input
20955 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
20956 // f_grid : [Hz]
20957 // abs_p : [Pa]
20958 // abs_t : [K]
20959 // vmr : [1] N2 vmr
20960 // abs_h2o : [1] H2O vmr
20961 //
20962
20963 if( abs_h2o.sum() < -1. )
20964 {
20965 ostringstream os;
20966 os << "Continuum/full model tag " << name
20967 << " requires H2O-vmr, but no tag group contains H2O!";
20968 throw runtime_error(os.str());
20969 }
20970
20971 const int Nparam = 1;
20972 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
20973 {
20974 out3 << "Continuum model " << name << " is running with \n"
20975 << "user defined parameters according to model " << model << ".\n";
20976 Pardo_ATM_N2_dry_continuum( pxsec,
20977 parameters[0], // coefficient
20978 model,
20979 f_grid,
20980 abs_p,
20981 abs_t,
20982 vmr,
20983 abs_h2o,
20984 verbosity );
20985 }
20986 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
20987 {
20988 ostringstream os;
20989 os << "Continuum model " << name << " requires " << Nparam << " input\n"
20990 << "parameters for the model " << model << ",\n"
20991 << "but you specified " << parameters.nelem() << " parameters.\n";
20992 throw runtime_error(os.str());
20993 }
20994 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
20995 {
20996 out3 << "Continuum model " << name << " running with \n"
20997 << "the parameters for model " << model << ".\n";
20998 Pardo_ATM_N2_dry_continuum( pxsec,
20999 0.000, // coefficient
21000 model,
21001 f_grid,
21002 abs_p,
21003 abs_t,
21004 vmr,
21005 abs_h2o,
21006 verbosity );
21007 }
21008 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21009 {
21010 ostringstream os;
21011 os << "ERROR: Continuum model " << name << " requires NO input\n"
21012 << "parameters for the model " << model << ",\n"
21013 << "but you specified " << parameters.nelem() << " parameters.\n"
21014 << "This ambiguity can not be solved by arts.\n"
21015 << "Please see the arts user guide chapter 3.\n";
21016 throw runtime_error(os.str());
21017 }
21018 }
21019 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21020 else if ( "N2-SelfContPWR93"==name )
21021 {
21022 // data information about this continuum:
21023 // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
21024 // "Atmospheric Remote Sensing by Microwave Radiometry",
21025 // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
21026 //
21027 // specific continuum parameters and units:
21028 // a) output
21029 // pxsec : [1/m],
21030 // b) input
21031 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
21032 // parameters[1] : continuum temperature exponent [1]
21033 // f_grid : [Hz]
21034 // abs_p : [Pa]
21035 // abs_t : [K]
21036 // vmr : [1]
21037 //
21038 const int Nparam = 2;
21039 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21040 {
21041 out3 << "Continuum model " << name << " is running with \n"
21042 << "user defined parameters according to model " << model << ".\n";
21043 Rosenkranz_N2_self_continuum( pxsec,
21044 parameters[0], // coefficient
21045 parameters[1], // temp. exponent
21046 model,
21047 f_grid,
21048 abs_p,
21049 abs_t,
21050 vmr,
21051 verbosity );
21052 }
21053 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21054 {
21055 ostringstream os;
21056 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21057 << "parameters for the model " << model << ",\n"
21058 << "but you specified " << parameters.nelem() << " parameters.\n";
21059 throw runtime_error(os.str());
21060 }
21061 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21062 {
21063 out3 << "Continuum model " << name << " running with \n"
21064 << "the parameters for model " << model << ".\n";
21065 Rosenkranz_N2_self_continuum( pxsec,
21066 0.00,
21067 0.00,
21068 model,
21069 f_grid,
21070 abs_p,
21071 abs_t,
21072 vmr,
21073 verbosity );
21074 }
21075 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21076 {
21077 ostringstream os;
21078 os << "ERROR: Continuum model " << name << " requires NO input\n"
21079 << "parameters for the model " << model << ",\n"
21080 << "but you specified " << parameters.nelem() << " parameters.\n"
21081 << "This ambiguity can not be solved by arts.\n"
21082 << "Please see the arts user guide chapter 3.\n";
21083 throw runtime_error(os.str());
21084 }
21085 }
21086 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21087 else if ( "N2-SelfContStandardType"==name )
21088 {
21089 // data information about this continuum:
21090 // A completely general expression for the N2 continuum
21091 //
21092 // specific continuum parameters and units:
21093 // OUTPUT
21094 // pxsec : [1/m],
21095 // INPUT
21096 // parameters[0] : continuum coefficient (C) [1/m * 1/(Hz*Pa)²]
21097 // parameters[1] : frequency exponent (xf) [1]
21098 // parameters[2] : temperature exponent (xt) [1]
21099 // parameters[3] : pressure exponent (xp) [1]
21100 // f_grid : [Hz]
21101 // abs_p : [Pa]
21102 // abs_t : [K]
21103 // vmr : [1]
21104 const int Nparam = 4;
21105 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21106 {
21107 out3 << "Continuum model " << name << " is running with \n"
21108 << "user defined parameters according to model " << model << ".\n";
21109 Standard_N2_self_continuum( pxsec,
21110 parameters[0],
21111 parameters[1],
21112 parameters[2],
21113 parameters[3],
21114 model,
21115 f_grid,
21116 abs_p,
21117 abs_t,
21118 vmr,
21119 verbosity );
21120 }
21121 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21122 {
21123 ostringstream os;
21124 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21125 << "parameters for the model " << model << ",\n"
21126 << "but you specified " << parameters.nelem() << " parameters.\n";
21127 throw runtime_error(os.str());
21128 }
21129 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21130 {
21131 out3 << "Continuum model " << name << " running with \n"
21132 << "the parameters for model " << model << ".\n";
21133 Standard_N2_self_continuum( pxsec,
21134 0.000,
21135 0.000,
21136 0.000,
21137 0.000,
21138 model,
21139 f_grid,
21140 abs_p,
21141 abs_t,
21142 vmr,
21143 verbosity );
21144 }
21145 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21146 {
21147 ostringstream os;
21148 os << "ERROR: Continuum model " << name << " requires NO input\n"
21149 << "parameters for the model " << model << ",\n"
21150 << "but you specified " << parameters.nelem() << " parameters.\n"
21151 << "This ambiguity can not be solved by arts.\n"
21152 << "Please see the arts user guide chapter 3.\n";
21153 throw runtime_error(os.str());
21154 }
21155 }
21156 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21157 else if ( "N2-SelfContBorysow"==name )
21158 {
21159 // data information about this continuum:
21160 // A. Borysow and L. Frommhold, The Astrophysical Journal,
21161 // Vol. 311, pp.1043-1057, 1986
21162 const int Nparam = 1;
21163 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21164 {
21165 out3 << "Continuum model " << name << " is running with \n"
21166 << "user defined parameters according to model " << model << ".\n";
21167 BF86_CIA_N2( pxsec,
21168 parameters[0], // scaling factor
21169 model,
21170 f_grid,
21171 abs_p,
21172 abs_t,
21173 vmr,
21174 verbosity );
21175 }
21176 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21177 {
21178 ostringstream os;
21179 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21180 << "parameters for the model " << model << ",\n"
21181 << "but you specified " << parameters.nelem() << " parameters.\n";
21182 throw runtime_error(os.str());
21183 }
21184 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21185 {
21186 out3 << "Continuum model " << name << " running with \n"
21187 << "the parameters for model " << model << ".\n";
21188 BF86_CIA_N2( pxsec,
21189 0.0,
21190 model,
21191 f_grid,
21192 abs_p,
21193 abs_t,
21194 vmr,
21195 verbosity );
21196 }
21197 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21198 {
21199 ostringstream os;
21200 os << "ERROR: Continuum model " << name << " requires NO input\n"
21201 << "parameters for the model " << model << ",\n"
21202 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21203 << "This ambiguity can not be solved by arts.\n"
21204 << "Please see the arts user guide chapter 3.\n";
21205 throw runtime_error(os.str());
21206 }
21207 }
21208 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21209 else if ( "N2-CIArotCKDMT100"==name )
21210 {
21211 // data information about this continuum:
21212 // A. Borysow and L. Frommhold, The Astrophysical Journal,
21213 // Vol. 311, pp.1043-1057, 1986
21214 const int Nparam = 1;
21215 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21216 {
21217 out3 << "Continuum model " << name << " is running with \n"
21218 << "user defined parameters according to model " << model << ".\n";
21219 CKD_mt_CIArot_n2( pxsec,
21220 parameters[0], // scaling factor
21221 model,
21222 f_grid,
21223 abs_p,
21224 abs_t,
21225 vmr,
21226 verbosity );
21227 }
21228 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21229 {
21230 ostringstream os;
21231 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21232 << "parameters for the model " << model << ",\n"
21233 << "but you specified " << parameters.nelem() << " parameters.\n";
21234 throw runtime_error(os.str());
21235 }
21236 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21237 {
21238 out3 << "Continuum model " << name << " running with \n"
21239 << "the parameters for model " << model << ".\n";
21240 CKD_mt_CIArot_n2( pxsec,
21241 0.0,
21242 model,
21243 f_grid,
21244 abs_p,
21245 abs_t,
21246 vmr,
21247 verbosity );
21248 }
21249 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21250 {
21251 ostringstream os;
21252 os << "ERROR: Continuum model " << name << " requires NO input\n"
21253 << "parameters for the model " << model << ",\n"
21254 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21255 << "This ambiguity can not be solved by arts.\n"
21256 << "Please see the arts user guide chapter 3.\n";
21257 throw runtime_error(os.str());
21258 }
21259 }
21260 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21261 else if ( "N2-CIAfunCKDMT100"==name )
21262 {
21263 // data information about this continuum:
21264 // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
21265 // Infrared collision-induced absorption by
21266 // N2 near 4.3 microns for atmospheric applications:
21267 // Measurements and emprirical modeling,
21268 // Appl. Optics, 35, 5911-5917, (1996)
21269
21270 const int Nparam = 1;
21271 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21272 {
21273 out3 << "Continuum model " << name << " is running with \n"
21274 << "user defined parameters according to model " << model << ".\n";
21275 CKD_mt_CIAfun_n2( pxsec,
21276 parameters[0], // scaling factor
21277 model,
21278 f_grid,
21279 abs_p,
21280 abs_t,
21281 vmr,
21282 verbosity );
21283 }
21284 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21285 {
21286 ostringstream os;
21287 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21288 << "parameters for the model " << model << ",\n"
21289 << "but you specified " << parameters.nelem() << " parameters.\n";
21290 throw runtime_error(os.str());
21291 }
21292 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21293 {
21294 out3 << "Continuum model " << name << " running with \n"
21295 << "the parameters for model " << model << ".\n";
21296 CKD_mt_CIAfun_n2( pxsec,
21297 0.0,
21298 model,
21299 f_grid,
21300 abs_p,
21301 abs_t,
21302 vmr,
21303 verbosity );
21304 }
21305 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21306 {
21307 ostringstream os;
21308 os << "ERROR: Continuum model " << name << " requires NO input\n"
21309 << "parameters for the model " << model << ",\n"
21310 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21311 << "This ambiguity can not be solved by arts.\n"
21312 << "Please see the arts user guide chapter 3.\n";
21313 throw runtime_error(os.str());
21314 }
21315 }
21316 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21317 else if ( "N2-CIArotCKDMT252"==name )
21318 {
21319 // data information about this continuum:
21320 // A. Borysow and L. Frommhold, The Astrophysical Journal,
21321 // Vol. 311, pp.1043-1057, 1986
21322
21323 if( abs_o2.sum() < -1. )
21324 {
21325 ostringstream os;
21326 os << "Continuum/full model tag " << name
21327 << " requires O2-vmr, but no tag group contains O2!";
21328 throw runtime_error(os.str());
21329 }
21330
21331 if( abs_h2o.sum() < -1. )
21332 {
21333 ostringstream os;
21334 os << "Continuum/full model tag " << name
21335 << " requires H2O-vmr, but no tag group contains H2O!";
21336 throw runtime_error(os.str());
21337 }
21338
21339 const int Nparam = 1;
21340 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21341 {
21342 out3 << "Continuum model " << name << " is running with \n"
21343 << "user defined parameters according to model " << model << ".\n";
21344 CKD_mt_250_CIArot_n2( pxsec,
21345 parameters[0], // scaling factor
21346 model,
21347 f_grid,
21348 abs_p,
21349 abs_t,
21350 vmr,
21351 abs_h2o,
21352 abs_o2,
21353 verbosity );
21354 }
21355 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21356 {
21357 ostringstream os;
21358 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21359 << "parameters for the model " << model << ",\n"
21360 << "but you specified " << parameters.nelem() << " parameters.\n";
21361 throw runtime_error(os.str());
21362 }
21363 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21364 {
21365 out3 << "Continuum model " << name << " running with \n"
21366 << "the parameters for model " << model << ".\n";
21367 CKD_mt_250_CIArot_n2( pxsec,
21368 0.0,
21369 model,
21370 f_grid,
21371 abs_p,
21372 abs_t,
21373 vmr,
21374 abs_h2o,
21375 abs_o2,
21376 verbosity );
21377 }
21378 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21379 {
21380 ostringstream os;
21381 os << "ERROR: Continuum model " << name << " requires NO input\n"
21382 << "parameters for the model " << model << ",\n"
21383 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21384 << "This ambiguity can not be solved by arts.\n"
21385 << "Please see the arts user guide chapter 3.\n";
21386 throw runtime_error(os.str());
21387 }
21388 }
21389 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21390 else if ( "N2-CIAfunCKDMT252"==name )
21391 {
21392 // data information about this continuum:
21393 // Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and J._M. Hartmann,
21394 // Infrared collision-induced absorption by
21395 // N2 near 4.3 microns for atmospheric applications:
21396 // Measurements and emprirical modeling,
21397 // Appl. Optics, 35, 5911-5917, (1996)
21398
21399 if( abs_o2.sum() < -1. )
21400 {
21401 ostringstream os;
21402 os << "Continuum/full model tag " << name
21403 << " requires O2-vmr, but no tag group contains O2!";
21404 throw runtime_error(os.str());
21405 }
21406
21407 if( abs_h2o.sum() < -1. )
21408 {
21409 ostringstream os;
21410 os << "Continuum/full model tag " << name
21411 << " requires H2O-vmr, but no tag group contains H2O!";
21412 throw runtime_error(os.str());
21413 }
21414
21415 const int Nparam = 1;
21416 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21417 {
21418 out3 << "Continuum model " << name << " is running with \n"
21419 << "user defined parameters according to model " << model << ".\n";
21420 CKD_mt_250_CIAfun_n2( pxsec,
21421 parameters[0], // scaling factor
21422 model,
21423 f_grid,
21424 abs_p,
21425 abs_t,
21426 vmr,
21427 abs_h2o,
21428 abs_o2,
21429 verbosity );
21430 }
21431 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21432 {
21433 ostringstream os;
21434 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21435 << "parameters for the model " << model << ",\n"
21436 << "but you specified " << parameters.nelem() << " parameters.\n";
21437 throw runtime_error(os.str());
21438 }
21439 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21440 {
21441 out3 << "Continuum model " << name << " running with \n"
21442 << "the parameters for model " << model << ".\n";
21443 CKD_mt_250_CIAfun_n2( pxsec,
21444 0.0,
21445 model,
21446 f_grid,
21447 abs_p,
21448 abs_t,
21449 vmr,
21450 abs_h2o,
21451 abs_o2,
21452 verbosity );
21453 }
21454 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21455 {
21456 ostringstream os;
21457 os << "ERROR: Continuum model " << name << " requires NO input\n"
21458 << "parameters for the model " << model << ",\n"
21459 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21460 << "This ambiguity can not be solved by arts.\n"
21461 << "Please see the arts user guide chapter 3.\n";
21462 throw runtime_error(os.str());
21463 }
21464 }
21465
21466 // ============= CO2 continuum ========================================================
21467 else if ( "CO2-CKD241"==name )
21468 {
21469 // data information about this continuum:
21470 // CKDv2.4.1 model at http://www.rtweb.aer.com/continuum_frame.html
21471 // This continuum accounts for the far wings of the many COS lines/bands since
21472 // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
21473 //
21474 // specific continuum parameters and units:
21475 // OUTPUT
21476 // pxsec : [1/m],
21477 // INPUT
21478 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
21479 // parameters[1] : continuum temperature exponent [1]
21480 // f_grid : [Hz]
21481 // abs_p : [Pa]
21482 // abs_t : [K]
21483 // vmr : [1]
21484 //
21485 const int Nparam = 1;
21486 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21487 {
21488 out3 << "Continuum model " << name << " is running with \n"
21489 << "user defined parameters according to model " << model << ".\n";
21490 CKD_241_co2( pxsec,
21491 parameters[0], // abs. scaling
21492 model,
21493 f_grid,
21494 abs_p,
21495 abs_t,
21496 vmr,
21497 verbosity );
21498 }
21499 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21500 {
21501 ostringstream os;
21502 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21503 << "parameters for the model " << model << ",\n"
21504 << "but you specified " << parameters.nelem() << " parameters.\n";
21505 throw runtime_error(os.str());
21506 }
21507 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21508 {
21509 out3 << "Continuum model " << name << " running with \n"
21510 << "the parameters for model " << model << ".\n";
21511 CKD_241_co2( pxsec,
21512 0.00,
21513 model,
21514 f_grid,
21515 abs_p,
21516 abs_t,
21517 vmr,
21518 verbosity );
21519 }
21520 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21521 {
21522 ostringstream os;
21523 os << "ERROR: Continuum model " << name << " requires NO input\n"
21524 << "parameters for the model " << model << ",\n"
21525 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21526 << "This ambiguity can not be solved by arts.\n"
21527 << "Please see the arts user guide chapter 3.\n";
21528 throw runtime_error(os.str());
21529 }
21530 }
21531 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21532 else if ( "CO2-CKDMT100"==name )
21533 {
21534 // data information about this continuum:
21535 // CKD model at http://www.rtweb.aer.com/continuum_frame.html
21536 // This continuum accounts for the far wings of the many COS lines/bands since
21537 // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
21538 //
21539 // specific continuum parameters and units:
21540 // OUTPUT
21541 // pxsec : [1/m],
21542 // INPUT
21543 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
21544 // parameters[1] : continuum temperature exponent [1]
21545 // f_grid : [Hz]
21546 // abs_p : [Pa]
21547 // abs_t : [K]
21548 // vmr : [1]
21549 //
21550 const int Nparam = 1;
21551 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21552 {
21553 out3 << "Continuum model " << name << " is running with \n"
21554 << "user defined parameters according to model " << model << ".\n";
21555 CKD_mt_co2( pxsec,
21556 parameters[0], // abs. scaling
21557 model,
21558 f_grid,
21559 abs_p,
21560 abs_t,
21561 vmr,
21562 verbosity );
21563 }
21564 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21565 {
21566 ostringstream os;
21567 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21568 << "parameters for the model " << model << ",\n"
21569 << "but you specified " << parameters.nelem() << " parameters.\n";
21570 throw runtime_error(os.str());
21571 }
21572 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21573 {
21574 out3 << "Continuum model " << name << " running with \n"
21575 << "the parameters for model " << model << ".\n";
21576 CKD_mt_co2( pxsec,
21577 0.00,
21578 model,
21579 f_grid,
21580 abs_p,
21581 abs_t,
21582 vmr,
21583 verbosity );
21584 }
21585 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21586 {
21587 ostringstream os;
21588 os << "ERROR: Continuum model " << name << " requires NO input\n"
21589 << "parameters for the model " << model << ",\n"
21590 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21591 << "This ambiguity can not be solved by arts.\n"
21592 << "Please see the arts user guide chapter 3.\n";
21593 throw runtime_error(os.str());
21594 }
21595 }
21596 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21597 else if ( "CO2-CKDMT252"==name )
21598 {
21599 // data information about this continuum:
21600 // CKD model at http://www.rtweb.aer.com/continuum_frame.html
21601 // This continuum accounts for the far wings of the many COS lines/bands since
21602 // the line is used with a cutoff in the line shape with +/- 25 cm^-1.
21603 //
21604 // specific continuum parameters and units:
21605 // OUTPUT
21606 // pxsec : [1/m],
21607 // INPUT
21608 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
21609 // parameters[1] : continuum temperature exponent [1]
21610 // f_grid : [Hz]
21611 // abs_p : [Pa]
21612 // abs_t : [K]
21613 // vmr : [1]
21614 //
21615 const int Nparam = 1;
21616 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21617 {
21618 out3 << "Continuum model " << name << " is running with \n"
21619 << "user defined parameters according to model " << model << ".\n";
21620 CKD_mt_250_co2( pxsec,
21621 parameters[0], // abs. scaling
21622 model,
21623 f_grid,
21624 abs_p,
21625 abs_t,
21626 vmr,
21627 verbosity );
21628 }
21629 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21630 {
21631 ostringstream os;
21632 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21633 << "parameters for the model " << model << ",\n"
21634 << "but you specified " << parameters.nelem() << " parameters.\n";
21635 throw runtime_error(os.str());
21636 }
21637 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21638 {
21639 out3 << "Continuum model " << name << " running with \n"
21640 << "the parameters for model " << model << ".\n";
21641 CKD_mt_250_co2( pxsec,
21642 0.00,
21643 model,
21644 f_grid,
21645 abs_p,
21646 abs_t,
21647 vmr,
21648 verbosity );
21649 }
21650 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21651 {
21652 ostringstream os;
21653 os << "ERROR: Continuum model " << name << " requires NO input\n"
21654 << "parameters for the model " << model << ",\n"
21655 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21656 << "This ambiguity can not be solved by arts.\n"
21657 << "Please see the arts user guide chapter 3.\n";
21658 throw runtime_error(os.str());
21659 }
21660 }
21661
21662 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21663 else if ( "CO2-SelfContPWR93"==name )
21664 {
21665 // data information about this continuum:
21666 // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
21667 // "Atmospheric Remote Sensing by Microwave Radiometry",
21668 // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
21669 //
21670 // specific continuum parameters and units:
21671 // OUTPUT
21672 // pxsec : [1/m],
21673 // INPUT
21674 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
21675 // parameters[1] : continuum temperature exponent [1]
21676 // f_grid : [Hz]
21677 // abs_p : [Pa]
21678 // abs_t : [K]
21679 // vmr : [1]
21680 //
21681 const int Nparam = 2;
21682 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21683 {
21684 out3 << "Continuum model " << name << " is running with \n"
21685 << "user defined parameters according to model " << model << ".\n";
21686 Rosenkranz_CO2_self_continuum( pxsec,
21687 parameters[0], // coefficient
21688 parameters[1], // temp. exponent
21689 model,
21690 f_grid,
21691 abs_p,
21692 abs_t,
21693 vmr,
21694 verbosity );
21695 }
21696 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21697 {
21698 ostringstream os;
21699 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21700 << "parameters for the model " << model << ",\n"
21701 << "but you specified " << parameters.nelem() << " parameters.\n";
21702 throw runtime_error(os.str());
21703 }
21704 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21705 {
21706 out3 << "Continuum model " << name << " running with \n"
21707 << "the parameters for model " << model << ".\n";
21708 Rosenkranz_CO2_self_continuum( pxsec,
21709 0.00,
21710 0.00,
21711 model,
21712 f_grid,
21713 abs_p,
21714 abs_t,
21715 vmr,
21716 verbosity );
21717 }
21718 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21719 {
21720 ostringstream os;
21721 os << "ERROR: Continuum model " << name << " requires NO input\n"
21722 << "parameters for the model " << model << ",\n"
21723 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21724 << "This ambiguity can not be solved by arts.\n"
21725 << "Please see the arts user guide chapter 3.\n";
21726 throw runtime_error(os.str());
21727 }
21728 }
21729 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21730 else if ( "CO2-ForeignContPWR93"==name )
21731 {
21732 // data information about this continuum:
21733 // P. W. Rosenkranz Chapter 2, pp 74, in M. A. Janssen,
21734 // "Atmospheric Remote Sensing by Microwave Radiometry",
21735 // John Wiley & Sons, Inc., 1993, ISBN 0-471-62891-3
21736 //
21737 // specific continuum parameters and units:
21738 // OUTPUT
21739 // pxsec : [1/m],
21740 // INPUT
21741 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
21742 // parameters[1] : continuum temperature exponent [1]
21743 // f_grid : [Hz]
21744 // abs_p : [Pa]
21745 // abs_t : [K]
21746 // abs_n2 : [1]
21747 // vmr : [1]
21748 //
21749
21750 if( abs_n2.sum() < -1. )
21751 {
21752 ostringstream os;
21753 os << "Continuum/full model tag " << name
21754 << " requires N2-vmr, but no tag group contains N2!";
21755 throw runtime_error(os.str());
21756 }
21757
21758 const int Nparam = 2;
21759 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21760 {
21761 out3 << "Continuum model " << name << " is running with \n"
21762 << "user defined parameters according to model " << model << ".\n";
21763 Rosenkranz_CO2_foreign_continuum( pxsec,
21764 parameters[0],
21765 parameters[1],
21766 model,
21767 f_grid,
21768 abs_p,
21769 abs_t,
21770 abs_n2,
21771 vmr,
21772 verbosity );
21773 }
21774 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21775 {
21776 ostringstream os;
21777 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21778 << "parameters for the model " << model << ",\n"
21779 << "but you specified " << parameters.nelem() << " parameters.\n";
21780 throw runtime_error(os.str());
21781 }
21782 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21783 {
21784 out3 << "Continuum model " << name << " running with \n"
21785 << "the parameters for model " << model << ".\n";
21786 Rosenkranz_CO2_foreign_continuum( pxsec,
21787 0.00,
21788 0.00,
21789 model,
21790 f_grid,
21791 abs_p,
21792 abs_t,
21793 abs_n2,
21794 vmr,
21795 verbosity );
21796 }
21797 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21798 {
21799 ostringstream os;
21800 os << "ERROR: Continuum model " << name << " requires NO input\n"
21801 << "parameters for the model " << model << ",\n"
21802 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21803 << "This ambiguity can not be solved by arts.\n"
21804 << "Please see the arts user guide chapter 3.\n";
21805 throw runtime_error(os.str());
21806 }
21807 }
21808 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21809 else if ( "CO2-SelfContHo66"==name )
21810 {
21811 // data information about this continuum:
21812 // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of
21813 // microwave absorption in models of the atmosphere of Venus", JGR, 1966.
21814 //
21815 // specific continuum parameters and units:
21816 // OUTPUT
21817 // pxsec : [1/m],
21818 // INPUT
21819 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
21820 // parameters[1] : continuum temperature exponent [1]
21821 // f_grid : [Hz]
21822 // abs_p : [Pa]
21823 // abs_t : [K]
21824 // vmr : [1]
21825 //
21826 const int Nparam = 2;
21827 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21828 {
21829 out3 << "Continuum model " << name << " is running with \n"
21830 << "user defined parameters according to model " << model << ".\n";
21831 Ho66_CO2_self_continuum( pxsec,
21832 parameters[0], // coefficient
21833 parameters[1], // temp. exponent
21834 model,
21835 f_grid,
21836 abs_p,
21837 abs_t,
21838 vmr,
21839 verbosity );
21840 }
21841 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21842 {
21843 ostringstream os;
21844 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21845 << "parameters for the model " << model << ",\n"
21846 << "but you specified " << parameters.nelem() << " parameters.\n";
21847 throw runtime_error(os.str());
21848 }
21849 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21850 {
21851 out3 << "Continuum model " << name << " running with \n"
21852 << "the parameters for model " << model << ".\n";
21853 Ho66_CO2_self_continuum( pxsec,
21854 0.00,
21855 0.00,
21856 model,
21857 f_grid,
21858 abs_p,
21859 abs_t,
21860 vmr,
21861 verbosity );
21862 }
21863 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21864 {
21865 ostringstream os;
21866 os << "ERROR: Continuum model " << name << " requires NO input\n"
21867 << "parameters for the model " << model << ",\n"
21868 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21869 << "This ambiguity can not be solved by arts.\n"
21870 << "Please see the arts user guide chapter 3.\n";
21871 throw runtime_error(os.str());
21872 }
21873 }
21874 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21875 else if ( "CO2-ForeignContHo66"==name )
21876 {
21877 // data information about this continuum:
21878 // Reference: Ho, Kaufman and Thaddeus, "Laboratory measurements of
21879 // microwave absorption in models of the atmosphere of Venus", JGR, 1966.
21880 //
21881 // specific continuum parameters and units:
21882 // OUTPUT
21883 // pxsec : [1/m],
21884 // INPUT
21885 // parameters[0] : continuum strength coefficient [1/m * 1/(Hz*Pa)²]
21886 // parameters[1] : continuum temperature exponent [1]
21887 // f_grid : [Hz]
21888 // abs_p : [Pa]
21889 // abs_t : [K]
21890 // abs_n2 : [1]
21891 // vmr : [1]
21892 //
21893
21894 if( abs_n2.sum() < -1. )
21895 {
21896 ostringstream os;
21897 os << "Continuum/full model tag " << name
21898 << " requires N2-vmr, but no tag group contains N2!";
21899 throw runtime_error(os.str());
21900 }
21901
21902 const int Nparam = 2;
21903 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
21904 {
21905 out3 << "Continuum model " << name << " is running with \n"
21906 << "user defined parameters according to model " << model << ".\n";
21907 Ho66_CO2_foreign_continuum( pxsec,
21908 parameters[0],
21909 parameters[1],
21910 model,
21911 f_grid,
21912 abs_p,
21913 abs_t,
21914 abs_n2,
21915 vmr,
21916 verbosity );
21917 }
21918 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
21919 {
21920 ostringstream os;
21921 os << "Continuum model " << name << " requires " << Nparam << " input\n"
21922 << "parameters for the model " << model << ",\n"
21923 << "but you specified " << parameters.nelem() << " parameters.\n";
21924 throw runtime_error(os.str());
21925 }
21926 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
21927 {
21928 out3 << "Continuum model " << name << " running with \n"
21929 << "the parameters for model " << model << ".\n";
21930 Ho66_CO2_foreign_continuum( pxsec,
21931 0.00,
21932 0.00,
21933 model,
21934 f_grid,
21935 abs_p,
21936 abs_t,
21937 abs_n2,
21938 vmr,
21939 verbosity );
21940 }
21941 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
21942 {
21943 ostringstream os;
21944 os << "ERROR: Continuum model " << name << " requires NO input\n"
21945 << "parameters for the model " << model << ",\n"
21946 << "but you specified " << parameters.nelem() << " parameters. " << "\n"
21947 << "This ambiguity can not be solved by arts.\n"
21948 << "Please see the arts user guide chapter 3.\n";
21949 throw runtime_error(os.str());
21950 }
21951 }
21952 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21953 // ============= cloud and fog absorption from MPM93 ==================================
21954 else if ( "liquidcloud-MPM93"==name )
21955 {
21956 // Suspended water droplet absorption parameterization from MPM93 model
21957 // H. J. Liebe and G. A. Hufford and M. G. Cotton,
21958 // "Propagation modeling of moist air and suspended water/ice
21959 // particles at frequencies below 1000 GHz",
21960 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
21961 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
21962 //
21963 // specific continuum parameters and units:
21964 // OUTPUT
21965 // pxsec : [1/m],
21966 // INPUT
21967 // parameters[0] : [1]
21968 // parameters[1] : [1]
21969 // parameters[2] : [1]
21970 // model : [1]
21971 // f_grid : [Hz]
21972 // abs_p : [Pa]
21973 // abs_t : [K]
21974 // vmr : [1]
21975 //
21976 // liquid water droplet parameters:
21977 // suspended water droplet density range: 0-5 g/m³
21978 //
21979 // valid atmospheric condition:
21980 // temperature : 210 to 373 K
21981 //
21982 for ( Index s=0; s<f_grid.nelem(); ++s )
21983 {
21984 if( f_grid[s] > 1e12 )
21985 {
21986 ostringstream os;
21987 os << "Liquid cloud absorption model MPM93 only valid at\n"
21988 "frequencies up to 1THz. Yours are above.";
21989 throw runtime_error(os.str());
21990 }
21991 }
21992 for ( Index s=0; s<abs_t.nelem(); ++s )
21993 {
21994 if( ( abs_t[s] < 210. || abs_t[s] > 373.) &&
21995 abs(vmr[s])((vmr[s]) >= 0 ? (vmr[s]) : -(vmr[s])) > LIQUID_AND_ICE_TREAT_AS_ZERO )
21996 {
21997 ostringstream os;
21998 os << "Liquid cloud absorption model MPM93 only valid at\n"
21999 << "temperatures between 210 and 373K.\n"
22000 << "LWC values outside this temperature range must be < "
22001 << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n"
22002 << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3.";
22003 throw runtime_error(os.str());
22004 }
22005 }
22006
22007 const int Nparam = 3;
22008 if ( (model == "user") && (parameters.nelem() == Nparam) ) // --------------------
22009 {
22010 MPM93WaterDropletAbs(pxsec,
22011 parameters[0], // scaling factror
22012 parameters[1], // scaling factror
22013 parameters[2], // scaling factror
22014 model, // model option
22015 f_grid,
22016 abs_p,
22017 abs_t,
22018 vmr,
22019 verbosity);
22020 }
22021 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
22022 {
22023 ostringstream os;
22024 os << "MPM93 liquid water cloud absorption model " << name << " requires\n"
22025 << Nparam << " input parameter for the model " << model << ",\n"
22026 << "but you specified " << parameters.nelem() << " parameters.\n";
22027 throw runtime_error(os.str());
22028 }
22029 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
22030 {
22031 out3 << "MPM93 liquid water cloud absorption model " << name << " running with \n"
22032 << "the parameter for model " << model << ".\n";
22033 MPM93WaterDropletAbs(pxsec,
22034 0.000, // scaling factror
22035 0.000, // scaling factror
22036 0.000, // scaling factror
22037 model, // model option
22038 f_grid,
22039 abs_p,
22040 abs_t,
22041 vmr,
22042 verbosity);
22043 }
22044 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
22045 {
22046 ostringstream os;
22047 os << "ERROR: MPM93 liquid water cloud absorption model " << name << " requires NO input\n"
22048 << "parameters for the model " << model << ",\n"
22049 << "but you specified " << parameters.nelem() << " parameters.\n"
22050 << "This ambiguity can not be solved by arts.\n"
22051 << "Please see the arts user guide chapter 4.\n";
22052 throw runtime_error(os.str());
22053 }
22054 }
22055
22056 // ============= cloud and fog absorption from ELL07 ================================
22057 else if ( "liquidcloud-ELL07"==name )
22058 {
22059 // Suspended water droplet absorption parameterization from ELL07 model
22060 // W. J. Ellison
22061 // "Permittivity of Pure Water, at Standard Atmospheric Pressure, over the
22062 // Frequency Range 0-25 THz and Temperature Range 0-100C"
22063 // J. Phys. Chem. Ref. Data, Vol. 36, No. 1, 2007
22064
22065 // specific continuum parameters and units:
22066 // OUTPUT
22067 // pxsec : [1/m],
22068 // INPUT
22069 // model : [1]
22070 // f_grid : [Hz]
22071 // abs_p : [Pa]
22072 // abs_t : [K]
22073 // vmr : [1]
22074 //
22075 // liquid water droplet parameters:
22076 // suspended water droplet density range: 0-5 g/m³
22077 //
22078 // valid atmospheric condition:
22079 // temperature : 210 to 373 K
22080 //
22081 for ( Index s=0; s<f_grid.nelem(); ++s )
22082 {
22083 if( f_grid[s] > 25e12 )
22084 {
22085 ostringstream os;
22086 os << "Liquid cloud absorption model ELL07 only valid at\n"
22087 "frequencies up to 25THz. Yours are above.";
22088 throw runtime_error(os.str());
22089 }
22090 }
22091 for ( Index s=0; s<abs_t.nelem(); ++s )
22092 {
22093 if( ( abs_t[s] < 210. || abs_t[s] > 373.) &&
22094 abs(vmr[s])((vmr[s]) >= 0 ? (vmr[s]) : -(vmr[s])) > LIQUID_AND_ICE_TREAT_AS_ZERO )
22095 {
22096 ostringstream os;
22097 os << "Liquid cloud absorption model ELL07 only valid at\n"
22098 << "temperatures between 210 and 373K.\n"
22099 << "LWC values outside this temperature range must be < "
22100 << LIQUID_AND_ICE_TREAT_AS_ZERO << " kg/m3.\n"
22101 << "Your value at " << abs_t[s] << "K is: " << vmr[s] << " kg/m3.";
22102 throw runtime_error(os.str());
22103 }
22104 }
22105
22106 if ( (model == "ELL07") && (parameters.nelem() == 0) ) // --------------------
22107 {
22108 ELL07WaterDropletAbs(pxsec,
22109 model, // model option
22110 f_grid,
22111 abs_p,
22112 abs_t,
22113 vmr,
22114 verbosity);
22115 }
22116 else if ( (model == "ELL07") && (parameters.nelem() != 0) ) // --------------------
22117 {
22118 ostringstream os;
22119 os << "ERROR: ELL07 liquid water cloud absorption model " << name << " requires NO input\n"
22120 << "parameters for the model " << model << ",\n"
22121 << "but you specified " << parameters.nelem() << " parameters.\n"
22122 << "This ambiguity can not be solved by arts.\n"
22123 << "Please see the arts user guide chapter 4.";
22124 throw runtime_error(os.str());
22125 }
22126 else
22127 {
22128 ostringstream os;
22129 os << "ERROR: ELL07 liquid water cloud absorption model " << name
22130 << " has no model " << model;
22131 throw runtime_error(os.str());
22132 }
22133 }
22134
22135 // ============= ice particle absorption from MPM93 ===================================
22136 else if ( "icecloud-MPM93"==name )
22137 {
22138 // Ice particle absorption parameterization from MPM93 model
22139 // H. J. Liebe and G. A. Hufford and M. G. Cotton,
22140 // "Propagation modeling of moist air and suspended water/ice
22141 // particles at frequencies below 1000 GHz",
22142 // AGARD 52nd Specialists Meeting of the Electromagnetic Wave
22143 // Propagation Panel, Palma de Mallorca, Spain, 1993, May 17-21
22144 //
22145 // specific continuum parameters and units:
22146 // OUTPUT
22147 // pxsec : [1/m],
22148 // INPUT
22149 // parameters[0] : [1]
22150 // parameters[1] : [1]
22151 // parameters[2] : [1]
22152 // model : [1]
22153 // f_grid : [Hz]
22154 // abs_p : [Pa]
22155 // abs_t : [K]
22156 // vmr : [1]
22157 //
22158 // ice crystal parameters:
22159 // suspended water droplet density range: 0-10 g/m³
22160 // specific droplet weight value: 1 g/cm³
22161 //
22162 // valid atmospheric condition:
22163 // temperature : 233 to 323 K
22164 // relative humidity: 1 to 100 %
22165 //
22166 for ( Index s=0; s<f_grid.nelem(); ++s )
22167 {
22168 if( f_grid[s] > 1e12 )
22169 {
22170 ostringstream os;
22171 os << "Ice cloud absorption model MPM93 only valid at\n"
22172 "frequencies up to 1THz. Yours are above.";
22173 throw runtime_error(os.str());
22174 }
22175 }
22176
22177 const int Nparam = 3;
22178 if ( (model == "user") && (parameters.nelem() == Nparam) ) // ---------------------
22179 {
22180 MPM93IceCrystalAbs(pxsec,
22181 parameters[0], // scaling factror
22182 parameters[1], // scaling factror
22183 parameters[2], // scaling factror
22184 model, // model option
22185 f_grid,
22186 abs_p,
22187 abs_t,
22188 vmr,
22189 verbosity);
22190 }
22191 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // ----------------
22192 {
22193 ostringstream os;
22194 os << "MPM93 ice water cloud absorption model " << name << " requires \n"
22195 << Nparam << " input parameter for the model " << model << ",\n"
22196 << "but you specified " << parameters.nelem() << " parameters.\n";
22197 throw runtime_error(os.str());
22198 }
22199 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
22200 {
22201 MPM93IceCrystalAbs(pxsec,
22202 0.000, // scaling factror
22203 0.000, // scaling factror
22204 0.000, // scaling factror
22205 model, // model option
22206 f_grid,
22207 abs_p,
22208 abs_t,
22209 vmr,
22210 verbosity);
22211 }
22212 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
22213 {
22214 ostringstream os;
22215 os << "ERROR: MPM93 ice water cloud absorption model " << name << " requires NO input\n"
22216 << "parameters for the model " << model << ",\n"
22217 << "but you specified " << parameters.nelem() << " parameters.\n"
22218 << "This ambiguity can not be solved by arts.\n"
22219 << "Please see the arts user guide chapter 4.\n";
22220 throw runtime_error(os.str());
22221 }
22222 }
22223
22224 // ============= rain extinction from MPM93 ===========================================
22225 else if ( "rain-MPM93"==name )
22226 {
22227 // Rain extinction parameterization from MPM93 model, described in
22228 // H. J. Liebe,
22229 // "MPM - An Atmospheric Millimeter-Wave Propagation Model",
22230 // Int. J. Infrared and Millimeter Waves, vol. 10(6),
22231 // pp. 631-650, 1989
22232 // and based on
22233 // Olsen, R.L., D.V. Rogers, and D. B. Hodge, "The aR^b relation in the
22234 // calculation of rain attenuation", IEEE Trans. Antennas Propagat.,
22235 // vol. AP-26, pp. 318-329, 1978.
22236 //
22237 // specific continuum parameters and units:
22238 // OUTPUT
22239 // pxsec : [1/m],
22240 // INPUT
22241 // parameters[0] : [1]
22242 // parameters[1] : [1]
22243 // parameters[2] : [1]
22244 // model : [1]
22245 // f_grid : [Hz]
22246 // abs_p : [Pa]
22247 // abs_t : [K]
22248 // vmr : [kg/m2/s]
22249 //
22250 // rain parameters:
22251 // rain rate range: 0-150 mm/h (=0-0.42 kg/m2/s)
22252 //
22253 // valid atmospheric condition:
22254 // temperature : (preferably above 273 K...)
22255 //
22256 for ( Index s=0; s<f_grid.nelem(); ++s )
22257 {
22258 if( f_grid[s] > 1e12 )
22259 {
22260 ostringstream os;
22261 os << "Rain absorption model MPM93 only valid at\n"
22262 "frequencies up to 1THz. Yours is above.";
22263 throw runtime_error(os.str());
22264 }
22265 }
22266 const int Nparam = 3;
22267 if ( (model == "user") && (parameters.nelem() == Nparam) ) // -------------------------
22268 {
22269 out3 << "MPM93 rain extinction model " << name << " is running with \n"
22270 << "user defined parameters according to model " << model << ".\n";
22271 MPM93RainExt(pxsec,
22272 parameters[0], // scaling factor
22273 parameters[1], // scaling factor
22274 parameters[2], // scaling factor
22275 model, // model option
22276 f_grid,
22277 abs_p,
22278 abs_t,
22279 vmr,
22280 verbosity);
22281 }
22282 else if ( (model == "user") && (parameters.nelem() != Nparam) ) // --------------------
22283 {
22284 ostringstream os;
22285 os << "MPM93 rain extinction model " << name << " requires \n"
22286 << Nparam << " input parameter for the model " << model << ",\n"
22287 << "but you specified " << parameters.nelem() << " parameters.\n";
22288 throw runtime_error(os.str());
22289 }
22290 else if ( (model != "user") && (parameters.nelem() == 0) ) // --------------------
22291 {
22292 out3 << "MPM93 rain extinction model " << name << " running with \n"
22293 << "the parameter for model " << model << ".\n";
22294 MPM93RainExt(pxsec,
22295 0.000, // scaling factor
22296 0.000, // scaling factor
22297 0.000, // scaling factor
22298 model, // model option
22299 f_grid,
22300 abs_p,
22301 abs_t,
22302 vmr,
22303 verbosity);
22304 }
22305 else if ( (model != "user") && (parameters.nelem() != 0) ) // --------------------
22306 {
22307 ostringstream os;
22308 os << "ERROR: MPM93 rain extinction model " << name << " requires NO input\n"
22309 << "parameters for the model " << model << ",\n"
22310 << "but you specified " << parameters.nelem() << " parameters.\n"
22311 << "This ambiguity can not be solved by arts.\n"
22312 << "Please see the arts user guide chapter 4.\n";
22313 throw runtime_error(os.str());
22314 }
22315 }
22316 else // -----------------------------------------------------------------------
22317 {
22318 // none of the continuum or full model tags were selected -> error message.
22319 ostringstream os;
22320 os << "ERROR: Continuum/ full model tag `" << name << "' not yet implemented in arts!";
22321 throw runtime_error(os.str());
22322 }
22323
22324 // We have to divide the result from the internal continuum model by
22325 // the number density n to convert it from pseudo cross section to a
22326 // true cross section.
22327
22328 // Boltzmann constant
22329 extern const Numeric BOLTZMAN_CONST;
22330
22331 // Loop all pressures:
22332 for ( Index i=0; i<abs_p.nelem(); ++i )
22333 {
22334 const Numeric p_i = abs_p[i];
22335 const Numeric t_i = abs_t[i];
22336
22337 // Calculate total number density from pressure and temperature.
22338 // n = n0*T0/p0 * p/T or n = p/kB/t, ideal gas law
22339 const Numeric n = p_i / BOLTZMAN_CONST / t_i;
22340
22341 // We add to the output variable xsec here, previous content is
22342 // not overwritten!
22343 pxsec(joker,i) /= n;
22344 xsec(joker,i) += pxsec(joker,i);
22345 }
22346}
22347
22348// #################################################################################
22349
22350/**
22351 An auxiliary functions that checks if a given continuum model is
22352 listed in species_data.cc. This is just in order to verify that this
22353 really represents a valid continuum model.
22354
22355 The given name should be something like
22356 'H2O-ContStandardSelf'. The function simply checks if there is a
22357 species H2O with an isotopologue ContStandardSelf.
22358
22359 For user-friendliness, the function also compiles a list of allowed
22360 continuum models and gives this as an error message if the model is
22361 not found.
22362
22363 The function has no return value, since, if the name does not match
22364 a valid model an error is thrown anyway.
22365
22366 \param name The name of the continuum model to check.
22367
22368 \throw runtime_error The model does not exist.
22369
22370 \author Stefan Buehler
22371 \date 2001-03-12
22372*/
22373void check_continuum_model(const String& name)
22374{
22375 // The species lookup data:
22376 using global_data::species_data;
22377
22378 // For the list of valid continuum models:
22379 ArrayOfString valid_models;
22380
22381 bool found = false;
22382
22383 // Loop all species:
22384 for ( Array<SpeciesRecord>::const_iterator i=species_data.begin();
22385 i<species_data.end();
22386 ++i )
22387 {
22388 String specnam = i->Name();
22389
22390 // Loop all isotopologues:
22391 for ( Array<IsotopologueRecord>::const_iterator j=i->Isotopologue().begin();
22392 j<i->Isotopologue().end();
22393 ++j )
22394 {
22395 String isonam = j->Name();
22396
22397 // The specified name consists of a species part and an
22398 // isotopologue part, e.g., H2O-ContStandardSelf. We need to
22399 // construct a similar String from the species lookup data
22400 // by concatenating species name and isotopologue name.
22401
22402 String fullnam = specnam + "-" + isonam;
22403 // cout << fullnam << "\n";
22404
22405 // See if this is a continuum tag, so that we can add it to
22406 // the list:
22407 if (j->isContinuum())
22408 {
22409 valid_models.push_back(fullnam);
22410 }
22411
22412 if ( name == fullnam )
22413 {
22414 found = true;
22415 }
22416 }
22417 }
22418
22419 // ----------------------------------------------------------------------
22420 // Have we found it?
22421 if (!found)
22422 {
22423 ostringstream os;
22424 os << "The String `" << name << "' matches none of the known\n"
22425 << "continuum models. Known continuum models are:";
22426 for ( ArrayOfString::const_iterator i=valid_models.begin();
22427 i<valid_models.end();
22428 ++i )
22429 {
22430 os << "\n" << *i;
22431 }
22432 throw runtime_error(os.str());
22433 }
22434}
22435//
22436//
22437// #################################################################################
22438// ############################# f2c code implementation ###########################
22439// #################################################################################
22440//
22441//
22442// ------------------- begin of f2c.h file --------------------------------
22443//
22444/* f2c.h -- Standard Fortran to C header file */
22445#ifndef F2C_INCLUDE
22446#define F2C_INCLUDE
22447
22448typedef long int integer;
22449typedef unsigned long int uinteger;
22450typedef char *address;
22451typedef short int shortint;
22452typedef float real_t;
22453typedef double doublereal;
22454typedef struct { real_t r, i; } complex_t;
22455typedef struct { doublereal r, i; } doublecomplex;
22456typedef long int logical;
22457typedef short int shortlogical;
22458typedef char logical1;
22459typedef char integer1;
22460#ifdef INTEGER_STAR_8 /* Adjust for integer*8. */
22461typedef long long longint; /* system-dependent */
22462typedef unsigned long long ulongint; /* system-dependent */
22463#define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b)))
22464#define qbit_set(a,b) ((a) | ((ulongint)1 << (b)))
22465#endif
22466
22467#define TRUE_(1) (1)
22468#define FALSE_(0) (0)
22469
22470/* Extern is for use with -E */
22471#ifndef Externextern
22472#define Externextern extern
22473#endif
22474
22475/* I/O stuff */
22476
22477#ifdef f2c_i2
22478/* for -i2 */
22479typedef short flag;
22480typedef short ftnlen;
22481typedef short ftnint;
22482#else
22483typedef long int flag;
22484typedef long int ftnlen;
22485typedef long int ftnint;
22486#endif
22487
22488/*external read, write*/
22489typedef struct
22490{ flag cierr;
22491 ftnint ciunit;
22492 flag ciend;
22493 char *cifmt;
22494 ftnint cirec;
22495} cilist;
22496
22497/*internal read, write*/
22498typedef struct
22499{ flag icierr;
22500 char *iciunit;
22501 flag iciend;
22502 char *icifmt;
22503 ftnint icirlen;
22504 ftnint icirnum;
22505} icilist;
22506
22507/*open*/
22508typedef struct
22509{ flag oerr;
22510 ftnint ounit;
22511 char *ofnm;
22512 ftnlen ofnmlen;
22513 char *osta;
22514 char *oacc;
22515 char *ofm;
22516 ftnint orl;
22517 char *oblnk;
22518} olist;
22519
22520/*close*/
22521typedef struct
22522{ flag cerr;
22523 ftnint cunit;
22524 char *csta;
22525} cllist;
22526
22527/*rewind, backspace, endfile*/
22528typedef struct
22529{ flag aerr;
22530 ftnint aunit;
22531} alist;
22532
22533/* inquire */
22534typedef struct
22535{ flag inerr;
22536 ftnint inunit;
22537 char *infile;
22538 ftnlen infilen;
22539 ftnint *inex; /*parameters in standard's order*/
22540 ftnint *inopen;
22541 ftnint *innum;
22542 ftnint *innamed;
22543 char *inname;
22544 ftnlen innamlen;
22545 char *inacc;
22546 ftnlen inacclen;
22547 char *inseq;
22548 ftnlen inseqlen;
22549 char *indir;
22550 ftnlen indirlen;
22551 char *infmt;
22552 ftnlen infmtlen;
22553 char *inform;
22554 ftnint informlen;
22555 char *inunf;
22556 ftnlen inunflen;
22557 ftnint *inrecl;
22558 ftnint *innrec;
22559 char *inblank;
22560 ftnlen inblanklen;
22561} inlist;
22562
22563#define VOIDvoid void
22564
22565union Multitype { /* for multiple entry points */
22566 integer1 g;
22567 shortint h;
22568 integer i;
22569 /* longint j; */
22570 real_t r;
22571 doublereal d;
22572 complex_t c;
22573 doublecomplex z;
22574 };
22575
22576typedef union Multitype Multitype;
22577
22578/*typedef long int Long;*/ /* No longer used; formerly in Namelist */
22579
22580struct Vardesc { /* for Namelist */
22581 char *name;
22582 char *addr;
22583 ftnlen *dims;
22584 int type;
22585 };
22586typedef struct Vardesc Vardesc;
22587
22588struct Namelist {
22589 char *name;
22590 Vardesc **vars;
22591 int nvars;
22592 };
22593typedef struct Namelist Namelist;
22594
22595#define abs(x)((x) >= 0 ? (x) : -(x)) ((x) >= 0 ? (x) : -(x))
22596#define dabs(x)(doublereal)((x) >= 0 ? (x) : -(x)) (doublereal)abs(x)((x) >= 0 ? (x) : -(x))
22597#define min(a,b)((a) <= (b) ? (a) : (b)) ((a) <= (b) ? (a) : (b))
22598#define max(a,b)((a) >= (b) ? (a) : (b)) ((a) >= (b) ? (a) : (b))
22599#define dmin(a,b)(doublereal)((a) <= (b) ? (a) : (b)) (doublereal)min(a,b)((a) <= (b) ? (a) : (b))
22600#define dmax(a,b)(doublereal)((a) >= (b) ? (a) : (b)) (doublereal)max(a,b)((a) >= (b) ? (a) : (b))
22601#define bit_test(a,b)((a) >> (b) & 1) ((a) >> (b) & 1)
22602#define bit_clear(a,b)((a) & ~((uinteger)1 << (b))) ((a) & ~((uinteger)1 << (b)))
22603#define bit_set(a,b)((a) | ((uinteger)1 << (b))) ((a) | ((uinteger)1 << (b)))
22604
22605/* procedure parameter types for -A and -C++ */
22606
22607#define F2C_proc_par_types1 1
22608#ifdef __cplusplus201103L
22609typedef int /* Unknown procedure type */ (*U_fp)(...);
22610typedef shortint (*J_fp)(...);
22611typedef integer (*I_fp)(...);
22612typedef real_t (*R_fp)(...);
22613typedef doublereal (*D_fp)(...), (*E_fp)(...);
22614typedef /* Complex */ VOIDvoid (*C_fp)(...);
22615typedef /* Double Complex */ VOIDvoid (*Z_fp)(...);
22616typedef logical (*L_fp)(...);
22617typedef shortlogical (*K_fp)(...);
22618typedef /* Character */ VOIDvoid (*H_fp)(...);
22619typedef /* Subroutine */ int (*S_fp)(...);
22620#else
22621typedef int /* Unknown procedure type */ (*U_fp)();
22622typedef shortint (*J_fp)();
22623typedef integer (*I_fp)();
22624typedef real_t (*R_fp)();
22625typedef doublereal (*D_fp)(), (*E_fp)();
22626typedef /* Complex */ VOIDvoid (*C_fp)();
22627typedef /* Double Complex */ VOIDvoid (*Z_fp)();
22628typedef logical (*L_fp)();
22629typedef shortlogical (*K_fp)();
22630typedef /* Character */ VOIDvoid (*H_fp)();
22631typedef /* Subroutine */ int (*S_fp)();
22632#endif
22633/* E_fp is for real functions when -R is not specified */
22634typedef VOIDvoid C_f; /* complex function */
22635typedef VOIDvoid H_f; /* character function */
22636typedef VOIDvoid Z_f; /* double complex function */
22637typedef doublereal E_f; /* real function with -R not specified */
22638
22639/* undef any lower-case symbols that your C compiler predefines, e.g.: */
22640
22641#ifndef Skip_f2c_Undefs
22642#undef cray
22643#undef gcos
22644#undef mc68010
22645#undef mc68020
22646#undef mips
22647#undef pdp11
22648#undef sgi
22649#undef sparc
22650#undef sun
22651#undef sun2
22652#undef sun3
22653#undef sun4
22654#undef u370
22655#undef u3b
22656#undef u3b2
22657#undef u3b5
22658#undef unix
22659#undef vax
22660#endif
22661#endif
22662
22663// ------------------- end of f2c.h file --------------------------------
22664
22665
22666// ------------------ begin of Borysow N2N2 F77 code --------------------
22667
22668
22669/* n2n2tks.f -- translated by f2c (version 20010821).
22670 You must link the resulting object file with the libraries:
22671 -lf2c -lm (in that order)
22672*/
22673
22674/* Common Block Declarations */
22675
22676struct s_blockin_ {
22677 double temp, fnumin, fnumax, dnu;
22678} blockin_;
22679
22680#define blockin_1blockin_ blockin_
22681
22682struct s_app3a_ {
22683 double slit, dx, wnrmax3;
22684} app3a_;
22685
22686#define app3a_1app3a_ app3a_
22687
22688struct s_app3b_ {
22689 int nsri, ns, nsriup;
22690} app3b_;
22691
22692#define app3b_1app3b_ app3b_
22693
22694struct s_rsilo_ {
22695 double rsilo[201];
22696} rsilo_;
22697
22698#define rsilo_1rsilo_ rsilo_
22699
22700struct s_bou43_ {
22701 int initb;
22702} bou43_;
22703
22704#define bou43_1bou43_ bou43_
22705
22706union u_bba_ {
22707 struct s_m_1 {
22708 double omeg[201], rsi[201], rsigg[201], alfa;
22709 } m_1;
22710 struct s_m_2 {
22711 double omeg[201], rsi[201], rsigg[201], beta;
22712 } m_2;
22713} bba_;
22714
22715#define bba_1(bba_.m_1) (bba_.m_1)
22716#define bba_2(bba_.m_2) (bba_.m_2)
22717
22718struct s_bbc_ {
22719 int nsol;
22720} bbc_;
22721
22722#define bbc_1bbc_ bbc_
22723
22724struct s_bf_ {
22725 double g0bf, delbf, om0;
22726} bf_;
22727
22728#define bf_1bf_ bf_
22729
22730struct like_1_ {
22731 int like;
22732 char lgas[5];
22733};
22734
22735#define like_1(*(struct like_1_ *) &like_) (*(struct like_1_ *) &like_)
22736
22737struct s_k1k0_ {
22738 int ik1k0;
22739} k1k0_;
22740
22741#define k1k0_1k1k0_ k1k0_
22742
22743struct s_bbb_ {
22744 int ibound;
22745} bbb_;
22746
22747#define bbb_1bbb_ bbb_
22748
22749struct energ_1_ {
22750 double eb[246] /* was [41][6] */;
22751 int niv[6];
22752};
22753
22754#define energ_1(*(struct energ_1_ *) &energ_) (*(struct energ_1_ *) &energ_)
22755
22756struct s_dimer_ {
22757 int nlines;
22758} dimer_;
22759
22760#define dimer_1dimer_ dimer_
22761
22762struct n2part_1_ {
22763 double q1, wn2[2], b01, d01;
22764 int jrange2;
22765};
22766struct n2part_2_ {
22767 double q, wn2[2], b0, d0;
22768 int jrange1;
22769};
22770
22771#define n2part_1(*(struct n2part_1_ *) &n2part_) (*(struct n2part_1_ *) &n2part_)
22772#define n2part_2(*(struct n2part_2_ *) &n2part_) (*(struct n2part_2_ *) &n2part_)
22773
22774union u_bl3_ {
22775 struct s_m_1 {
22776 double rsi[401];
22777 } m_1;
22778 struct s_m_2 {
22779 double rsibb[401];
22780 } m_2;
22781} bl3_;
22782
22783#define bl3_1(bl3_.m_1) (bl3_.m_1)
22784#define bl3_2(bl3_.m_2) (bl3_.m_2)
22785
22786union u_bbbb_ {
22787 struct s_m_1 {
22788 int idelv, iv, ivp, idell, il, ilp;
22789 } m_1;
22790 struct s_m_2 {
22791 int ldelvi, ivi, ivip, ldelel, ll, llp;
22792 } m_2;
22793} bbbb_;
22794
22795#define bbbb_1(bbbb_.m_1) (bbbb_.m_1)
22796#define bbbb_2(bbbb_.m_2) (bbbb_.m_2)
22797
22798/* Initialized data */
22799
22800struct s_energe_ {
22801 double e_1[246];
22802 int e_2[6];
22803 } energ_ = { {-54.99996, -54.86228, -54.58697, -54.17413, -53.62391,
22804 -52.93648, -52.11211, -51.15108, -50.05374, -48.82049, -47.45179,
22805 -45.94815, -44.31014, -42.53841, -40.63365, -38.59665, -36.42824,
22806 -34.12937, -31.70105, -29.14439, -26.46061, -23.65103, -20.71709,
22807 -17.66041, -14.48271, -11.18593, -7.77221, -4.24393, -.60374,
22808 3.14531, 6.99978, 10.95566, 15.00818, 19.15136, 23.37787,
22809 27.67681, 32.03237, 36.42278, 40.83668, 45.29436, 49.79246,
22810 -31.89437, -31.77215, -31.52779, -31.16143, -30.67334, -30.06382,
22811 -29.33328, -28.48222, -27.51123, -26.42099, -25.21229, -23.88603,
22812 -22.44322, -20.88502, -19.21272, -17.42777, -15.53182, -13.52669,
22813 -11.41446, -9.1975, -6.87848, -4.46049, -1.94714, .65736, 3.34788,
22814 6.11816, 8.95978, 11.8613, 14.80383, 17.75924, 20.71774,
22815 23.71589, 0., 0., 0., 0., 0., 0., 0., 0., 0., -16.05019, -15.9464,
22816 -15.73896, -15.42815, -15.0144, -14.4983, -13.88057, -13.16213,
22817 -12.34407, -11.42771, -10.41455, -9.30639, -8.10531, -6.81376,
22818 -5.43459, -3.97121, -2.42768, -.80899, .87859, 2.62689, 4.42334,
22819 6.24733, 8.06983, 9.90464, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
22820 0., 0., 0., 0., 0., 0., 0., -6.49343, -6.41131, -6.24732,
22821 -6.00202, -5.67623, -5.27111, -4.78813, -4.22919, -3.59665,
22822 -2.89345, -2.12325, -1.29074, -.40202, .5345, 1.50455, 2.48212,
22823 3.46665, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
22824 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1.76583, -1.70887,
22825 -1.59552, -1.427, -1.20523, -.93302, -.61434, -.25504, .13641, 0.,
22826 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
22827 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
22828 -.17133, -.14341, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
22829 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
22830 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, {41, 32, 24, 17, 9, 2} }
22831 ;
22832
22833struct s_n2part_ {
22834 double fill_1[1];
22835 double e_2[4];
22836 int fill_3[1];
22837 } n2part_ = { {0}, {2., 1., 1.98957, 5.8e-6}, {0} };
22838
22839struct s_like_ {
22840 int fill_1[1];
22841 char e_2[5];
22842 } like_ = { {0}, "N2N2" };
22843
22844
22845/* Table of constant values */
22846
22847// FIXME static integer c__9 = 9;
22848// FIXME static integer c__1 = 1;
22849// FIXME static integer c__5 = 5;
22850static int cs__1 = 1;
22851static int cs__0 = 0;
22852static double c_b24 = 2.9723;
22853static double c_b25 = -.99569;
22854static double c_b26 = .09464;
22855static double c_b27 = 1.2962e-12;
22856static double c_b28 = -.13048;
22857static double c_b29 = -.03128;
22858static double c_b30 = 3.7969e-14;
22859static double c_b31 = 1.03681;
22860static double c_b32 = -.14336;
22861static int cs__2 = 2;
22862static int cs__3 = 3;
22863static double c_b43 = .180926;
22864static double c_b44 = -1.69153;
22865static double c_b45 = .18605;
22866static double c_b46 = .3;
22867static double c_b47 = 0.;
22868static double c_b49 = 6.6017e-16;
22869static double c_b50 = 2.59982;
22870static double c_b51 = -.31831;
22871static double c_b52 = 1.2481e-12;
22872static double c_b53 = -.57028;
22873static double c_b54 = .05983;
22874static double c_b55 = 5.2681e-13;
22875static double c_b56 = -.24719;
22876static double c_b57 = .00519;
22877static double c_b58 = 2.7518e15;
22878static double c_b59 = -25.38969;
22879static double c_b60 = 2.46542;
22880static int cs__4 = 4;
22881static int cs__5 = 5;
22882// FIXME static integer c__2 = 2;
22883static double c_b78 = .0825299;
22884static double c_b79 = -1.25562;
22885static double c_b80 = .12981;
22886static double c_b84 = 3.6611e-15;
22887static double c_b85 = 1.47688;
22888static double c_b86 = -.16537;
22889static double c_b87 = 6.1264e-10;
22890static double c_b88 = -2.25011;
22891static double c_b89 = .15289;
22892static double c_b90 = 7.982e-10;
22893static double c_b91 = -2.76152;
22894static double c_b92 = .21847;
22895static double c_b93 = 5.2868e-22;
22896static double c_b94 = 7.66253;
22897static double c_b95 = -.77527;
22898static double c_b112 = 119.261;
22899static double c_b113 = -3.78587;
22900static double c_b114 = .34024;
22901static double c_b115 = 9.3777e-12;
22902static double c_b116 = -.66548;
22903static double c_b117 = .0033;
22904static double c_b118 = 3.0395e-13;
22905static double c_b119 = .24728;
22906static double c_b120 = -.06607;
22907static double c_b183 = 1e-6;
22908static double c_b186 = 1.5;
22909
22910#define temp (blockin_1blockin_.temp)
22911#define fnumin (blockin_1blockin_.fnumin)
22912#define fnumax (blockin_1blockin_.fnumax)
22913#define dnu (blockin_1blockin_.dnu)
22914#define slit (app3a_1app3a_.slit)
22915#define dx (app3a_1app3a_.dx)
22916#define rsilo (rsilo_1rsilo_.rsilo)
22917#define omeg (bba_1(bba_.m_1).omeg)
22918#define rsi (bba_1(bba_.m_1).rsi)
22919#define rsigg (bba_1(bba_.m_1).rsigg)
22920#define nsol (bbc_1bbc_.nsol)
22921#define like (like_1(*(struct like_1_ *) &like_).like)
22922#define ik1k0 (k1k0_1k1k0_.ik1k0)
22923#define ibound (bbb_1bbb_.ibound)
22924
22925/* TKS ****** SUBROUTINE N2N2TKS(T, F) ***************************************/
22926Numeric n2n2tks_(double t, double f)
22927{
22928 /* System generated locals */
22929 int s__1;
22930 double ret_val;
22931
22932 /* Local variables */
22933 //double hexa[10], quad[10];
22934 double freq[10], e;
22935 int i__;
22936 double s, x, t1, t2, t3, t4;
22937 int ij, nf, jj;
22938 double rslow1, si;
22939 int nr;
22940 double ss[1], tt[2];
22941 extern /* Subroutine */ int bound32_(double *, double *, int
22942 *), bound54_(double *, double *, int *);
22943 //double tksabs[5];
22944 extern /* Subroutine */ int spline_(int *, int *, int *,
22945 double *, double *, double *, double *,
22946 double *, double *, int *, double *);
22947 double abscoef[10];
22948 //double dtrans[10];
22949 extern /* Subroutine */ int addspec_(double *, double *,
22950 double *, double *, double *, double *,
22951 double *, int *, double *, double *, int *,
22952 int *, int *, int *, int *, int *);
22953 double eps, alfatot[10];
22954 extern /* Subroutine */ int partsum_(double *);
22955
22956/* ========================================= */
22957/* Copyright (C) Aleksandra Borysow, 1987) */
22958/* ==================================================================== */
22959/* PROGRAM PREPARED BY ALEKSANDRA BORYSOW (APRIL'1987) */
22960/* (UNIVERSITY OF TEXAS AT AUSTIN, PHYSICS DEPARTMENT) */
22961/* ORIGINAL VERSION: WRITTEN ON CYBER */
22962
22963/* PROGRAM GENERATES N2-N2 COLLISION-INDUCED SPECTRA AT */
22964/* TEMPERATURES BETWEEN 50 TO 300 K. */
22965/* CIA SPECTRA MODELED AFTER PAPER (*) */
22966/* ALEKSANDRA BORYSOW AND LOTHAR FROMMHOLD, */
22967/* ASTROPHYSICAL JOURNAL, VOL. 311, PAGES 1043-1057, (1986) */
22968
22969/* REVISED BY GLENN ORTON (1989) - TO WORK ON SUN WORKSTATIONS */
22970/* AND ON THE VAX MACHINES (FORTRAN-77) */
22971/* PASSES STANDARD TEST ON SUN, AT 200K (JULY 1992) */
22972/* ==================================================================== */
22973
22974/* ALSO IN REVISION: DOUBLE PRECISION FOR ALL F.P. VARIABLES */
22975
22976/* ==================================================================== */
22977
22978/* HISTORY: */
22979
22980/* 2001-02-28 THOMAS KUHN: */
22981/* CHANGE OF LINES */
22982/* RSILO(I)=DLOG(RSI(I)*1.E80) */
22983/* TO */
22984/* RSILO(I)=(DLOG(RSI(I))+80.0D0*DLOG(10.0D0)) */
22985/* BECAUSE OF OVERFLOW PROBLEMS. */
22986/* COSMETICS FOR THE CODE TO BE FASTER READABLE. */
22987/* CHANGE OF OUTPUT FILE NAME. */
22988/* CHANGE OF OUTPUT FILE CONTENT */
22989
22990/* ==================================================================== */
22991
22992/* TKS* IMPLICIT REAL*8 (A-H,O-Z) */
22993
22994/* TKS INPUT/OUTPUT VARIABLES */
22995/* REAL T, F */
22996
22997 //ret_val = 0.;
22998
22999/* TEMP = TEMPERATURE IN KELVIN, SHOULD BE BETWEEN 50. AND 300. */
23000/* FNUMIN = LOWEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */
23001/* FNUMAX = HIGHEST FREQUENCY IN CM-1, FOR LISTING OF ALPHA(FNU) */
23002/* LINE SHAPE MODELLING WILL BE MOST ACCURATE WITHIN RANGE OF */
23003/* R-T SPECTRAL INTENSITIES AS 1:100. */
23004/* DNU = FREQUENCY INCREMENT IN CM-1. DNU SHOULD BE CHOSEN SO */
23005/* THAT NOT MORE THAN 10 STEPS ARE NEEDED TO GO FROM */
23006/* FNUMIN TO FNUMAX (ELSE ARRAY DIMENSIONS OF FREQ,ABSCOEF */
23007/* MUST BE ADJUSTED IN ADDEM). */
23008
23009
23010/* USER: */
23011/* ----- */
23012/* EDIT ONLY HERE: TEMP (K), MIN. FREQ. (CM^-1)= FNUMIN, */
23013/* MAX. FREQ. = FNUMAX, STEP = DNU, SLITWIDTH (CM^-1)=SLIT */
23014/* (SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */
23015/* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */
23016/* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER, */
23017/* LEAVE LIKE = 1 (FOR LIKE PAIRS, AS N2-N2) */
23018/* THE PROGRAM WILL ASSUME EQUILIBRIUM N2, */
23019/* ALLOWED TEMPERATURE RANGE: 50-300K (DO NOT EXTEND IT BEYOND THESE LIMITS!) */
23020/* IF QUESTIONS: CONTACT ABORYSOW@NBI.DK */
23021/* TKS* NF=INT((FNUMAX-FNUMIN)/DNU+0.5)+1 */
23022/* TKS* IF (NF.GT.10) NF=10 */
23023/* TKS* FNUMAX=FNUMIN+FLOAT(NF-1)*DNU */
23024
23025/* TKS INPUT TEMPERATURE (K) CHECK OF RANGE */
23026 if (t < 50. || t > 300.) {
23027 ostringstream os;
23028 os << "out of T range ( 50<T<300)! return without calc.!" <<"\n";
23029 throw runtime_error(os.str());
23030 goto L999;
23031 }
23032 temp = t;
23033
23034/* *********************** INPUT DATA FROM USER *********************** */
23035/* FNUMIN = MINIMUM FREQENCY [CM^-1] */
23036 fnumin = f / 29979245800.;
23037/* FNUMAX = MAXIMUM FREQENCY [CM^-1] */
23038 fnumax = fnumin;
23039/* ONLY ONE FREQUENCY PER CALL */
23040 nf = 1;
23041/* DEFAULT VALUE OF FREQUENCY STEP [CM^-1] */
23042 dnu = 10.;
23043/* DEFAULT VALUE */
23044 like = 1;
23045/* SLIT = SLITWIDTH [CM^-1] */
23046/* SLIT=4.3 IS EQUIVALENT TO THAT OF VOYAGER SPECTRA, ONLY BOUND BOUND */
23047/* SPECTRA ARE CONVOLUTED WITH THIS SLITWIDTH, THE FREE FREE SPECTRA */
23048/* ARE FAR TOO BROAD FOR THE SLITWIDTH FUNCTION TO MATTER. */
23049 slit = 4.3;
23050/* ******************************************************************** */
23051
23052/* TKS* WRITE (6,14) LGAS,TEMP,FNUMIN,FNUMAX,DNU,NF-1 */
23053/* TKS*14 FORMAT(' ABSORPTION SPECTRA OF ',A5,' AT',F8.1,' K'/ */
23054/* TKS* $ 1X,43(1H=),/ */
23055/* TKS* 1' MIN.FREQ.=',F8.1,' CM-1',10X,'MAX.FREQ.=',F8.1,' CM-1',10X, */
23056/* TKS* 2'FREQ.INCREMENT=',F8.2,' CM-1',5X,'IN',I5,' STEPS'//) */
23057
23058
23059 partsum_(&temp);
23060
23061
23062/* THE N2-N2 SPECTRA FOR 50-300K */
23063/* ================================ */
23064
23065 x = log(temp);
23066 s__1 = nf;
23067 for (i__ = 1; i__ <= s__1; ++i__) {
23068/* FREQ(I)=FNUMIN+FLOAT(I-1)*DNU */
23069 freq[i__ - 1] = fnumin;
23070 alfatot[i__ - 1] = 0.;
23071/* L10: */
23072 abscoef[i__ - 1] = 0.;
23073 }
23074
23075
23076/* ==================================================================== */
23077
23078
23079 jj = 1;
23080L442:
23081/* L1023: */
23082 ++jj;
23083 if (jj == 42) {
23084 goto L444;
23085 }
23086 goto L442;
23087/* EB(JJ,IV) JJ-ROTATIONAL LEVEL "L", IV- VIBRATIONAL LEVEL "V"; */
23088L444:
23089
23090
23091
23092/* ==================================================================== */
23093
23094/* QUADRUPOLAR INDUCTION: (50-300K) LAMBDA1,LAMBDA2,LAMBDA,L=2023&0223 */
23095/* ------------------------------------------------------------------- */
23096
23097 eps = 1e-5;
23098 tt[0] = 10.;
23099 bound32_(&temp, rsi, &nsol);
23100 ij = 0;
23101 rslow1 = 0.;
23102 s__1 = nsol;
23103 for (i__ = 1; i__ <= s__1; ++i__) {
23104 ++ij;
23105/* MOD CAN BE ONLY 0 OR 1 OR 2 */
23106 if (ij % 3 == 0) {
23107 rslow1 = 1.5e-60;
23108 }
23109 if (ij % 3 == 1) {
23110 rslow1 = 1.7e-60;
23111 }
23112 if (ij % 3 == 2) {
23113 rslow1 = 1.6e-60;
23114 }
23115 if (rsi[i__ - 1] < 1e-60) {
23116 rsi[i__ - 1] = rslow1;
23117 }
23118/* TKS* RSILO(I)=DLOG(RSI(I)*1.D80) */
23119 rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.;
23120 omeg[i__ - 1] = (double) (i__ - 1) * dx;
23121/* L88: */
23122 }
23123
23124/* L9991: */
23125
23126 spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg)
23127 ;
23128
23129 ik1k0 = 1;
23130 ibound = 1;
23131/* B-C LINESHAPE HERE */
23132/* THESE VALUES (S,T1,T2) REPLACE VALUES GIVEN IN PAPER (*): */
23133/* PUBLISHED IN AN ERRATUM, ASTROPHYSICAL JOURNAL, VOL.320, P.437 */
23134/* (1987) */
23135 s = c_b24 * exp((c_b26 * x + c_b25) * x);
23136 t1 = c_b27 * exp((c_b29 * x + c_b28) * x);
23137 t2 = c_b30 * exp((c_b32 * x + c_b31) * x);
23138 e = 0.;
23139 t3 = 0.;
23140 t4 = 0.;
23141
23142 addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &
23143 like, &cs__2, &cs__0, &cs__2, &cs__3);
23144 s__1 = nf;
23145 for (i__ = 1; i__ <= s__1; ++i__) {
23146 //quad[i__ - 1] = abscoef[i__ - 1];
23147/* L20: */
23148 alfatot[i__ - 1] = abscoef[i__ - 1] + alfatot[i__ - 1];
23149 }
23150
23151
23152
23153/* ==================================================================== */
23154
23155/* HEXADECAPOLE COMPONENTS: LAMBDA1,LAMBDA2,LAMBDA,L=4045&0445 */
23156/* ----------------------------------------------------------- */
23157
23158 bound54_(&temp, rsi, &nsol);
23159 ij = 0;
23160 s__1 = nsol;
23161 for (i__ = 1; i__ <= s__1; ++i__) {
23162 ++ij;
23163/* MOD CAN BE ONLY 0 OR 1 OR 2 */
23164 if (ij % 3 == 0) {
23165 rslow1 = 1.5e-60;
23166 }
23167 if (ij % 3 == 1) {
23168 rslow1 = 1.7e-60;
23169 }
23170 if (ij % 3 == 2) {
23171 rslow1 = 1.6e-60;
23172 }
23173 if (rsi[i__ - 1] < 1e-60) {
23174 rsi[i__ - 1] = rslow1;
23175 }
23176/* TKS RSILO(I)=DLOG(RSI(I)*1.E80) */
23177 rsilo[i__ - 1] = log(rsi[i__ - 1]) + log(10.) * 80.;
23178/* L111: */
23179 omeg[i__ - 1] = (double) (i__ - 1) * dx;
23180 }
23181 spline_(&nsol, &cs__1, &cs__0, &eps, omeg, rsilo, tt, ss, &si, &nr, rsigg)
23182 ;
23183
23184/* --------------------------- */
23185/* TEMPERATURES 50-140K */
23186/* --------------------------- */
23187
23188 if (temp >= 140.) {
23189 goto L333;
23190 }
23191
23192 s = c_b43 * exp((c_b45 * x + c_b44) * x);
23193 e = c_b46 * exp((c_b47 * x + c_b47) * x);
23194 t1 = c_b49 * exp((c_b51 * x + c_b50) * x);
23195 t2 = c_b52 * exp((c_b54 * x + c_b53) * x);
23196 t3 = c_b55 * exp((c_b57 * x + c_b56) * x);
23197 t4 = c_b58 * exp((c_b60 * x + c_b59) * x);
23198
23199 ik1k0 = 0;
23200 ibound = 1;
23201 addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &
23202 like, &cs__4, &cs__0, &cs__4, &cs__5);
23203 s__1 = nf;
23204 for (i__ = 1; i__ <= s__1; ++i__) {
23205 //hexa[i__ - 1] = abscoef[i__ - 1];
23206 /*
23207 s_wsle(&io___25);
23208 do_lio(&c__9, &c__1, " T=50-140K: HEXA(", (ftnlen)17);
23209 do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int));
23210 do_lio(&c__9, &c__1, ") =", (ftnlen)3);
23211 do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof(
23212 double));
23213 e_wsle();
23214 */
23215/* L50: */
23216 alfatot[i__ - 1] += abscoef[i__ - 1];
23217 }
23218 goto L334;
23219
23220/* --------------------------- */
23221/* TEMPERATURES 140-300K */
23222/* --------------------------- */
23223
23224L333:
23225 ik1k0 = 0;
23226 ibound = 1;
23227 s = c_b78 * exp((c_b80 * x + c_b79) * x);
23228 e = c_b46 * exp((c_b47 * x + c_b47) * x);
23229 t1 = c_b84 * exp((c_b86 * x + c_b85) * x);
23230 t2 = c_b87 * exp((c_b89 * x + c_b88) * x);
23231 t3 = c_b90 * exp((c_b92 * x + c_b91) * x);
23232 t4 = c_b93 * exp((c_b95 * x + c_b94) * x);
23233
23234 addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &
23235 like, &cs__4, &cs__0, &cs__4, &cs__5);
23236 s__1 = nf;
23237 for (i__ = 1; i__ <= s__1; ++i__) {
23238 //hexa[i__ - 1] = abscoef[i__ - 1];
23239 /*
23240 s_wsle(&io___26);
23241 do_lio(&c__9, &c__1, " T=140-300K: HEXA(", (ftnlen)18);
23242 do_lio(&c__2, &c__1, (char *)&i__, (ftnlen)sizeof(int));
23243 do_lio(&c__9, &c__1, ") =", (ftnlen)3);
23244 do_lio(&c__5, &c__1, (char *)&abscoef[i__ - 1], (ftnlen)sizeof(
23245 double));
23246 e_wsle();
23247 */
23248/* L550: */
23249 alfatot[i__ - 1] += abscoef[i__ - 1];
23250 }
23251
23252/* ==================================================================== */
23253
23254/* DOUBLE TRANSITIONS: LAMBDA1,LAMBDA2,LAMBDA,L=2,2,3,3 */
23255/* ---------------------------------------------------- */
23256
23257/* --------------------------- */
23258/* TEMPERATURES 50-300K */
23259/* --------------------------- */
23260
23261L334:
23262 ik1k0 = 1;
23263 ibound = 0;
23264/* X S=Y(X,1.19261D-58, -3.78587,0.34024) */
23265 s = c_b112 * exp((c_b114 * x + c_b113) * x);
23266 t1 = c_b115 * exp((c_b117 * x + c_b116) * x);
23267 t2 = c_b118 * exp((c_b120 * x + c_b119) * x);
23268 t3 = 0.;
23269 t4 = 0.;
23270 addspec_(&s, &e, &t1, &t2, &t3, &t4, &temp, &nf, freq, abscoef, &cs__0, &
23271 like, &cs__2, &cs__2, &cs__3, &cs__3);
23272 s__1 = nf;
23273 for (i__ = 1; i__ <= s__1; ++i__) {
23274 //dtrans[i__ - 1] = abscoef[i__ - 1];
23275/* L650: */
23276 alfatot[i__ - 1] += abscoef[i__ - 1];
23277 }
23278
23279/* ==================================================================== */
23280
23281/* ANISOTROPIC OVERLAP NEGLECTED (LAMBDA1,LAMBDA2,LAMBDA,L=0212) */
23282/* SINCE THIS TERM IS EXTREMELY SMALL */
23283
23284/* ==================================================================== */
23285
23286/* TKS* PRINT 154, FREQ(1),FREQ(NF),FREQ(2)-FREQ(1),TEMP */
23287/* TKS* PRINT 156, (ALFATOT(I),I=1,NF) */
23288/* TKS*154 FORMAT(///' ABSORPTION COEFFICIENT ALPHA(FNU), FROM ',F5.1, */
23289/* TKS* $' CM-1 TO',F7.1,' CM-1, AT',F6.2,' CM-1 INCREMENTS, AT T=', */
23290/* TKS* $F7.2,' K, IN UNITS OF CM-1 AMAGAT-2'/) */
23291/* TKS*156 FORMAT(' ',10D13.5) */
23292/* TKS* OPEN(UNIT=10, FILE='OUT', STATUS='UNKNOWN') */
23293/* TKS* WRITE(10, 2929) (FREQ(I), ALFATOT(I), I=1, NF) */
23294/* TKS*C WRITE(10, 2929) (FREQ(I), QUAD(I), HEXA(I) ALFATOT(I), I=1, NF) */
23295/* TKS*2929 FORMAT(F10.3, E12.4) */
23296
23297/* TKS* STOP */
23298
23299
23300
23301/* TKS FILL OUTPUT VARIABLE */
23302// tksabs[0] = quad[0];
23303// tksabs[1] = hexa[0];
23304// tksabs[2] = dtrans[0];
23305// tksabs[3] = alfatot[0];
23306 ret_val = alfatot[0];
23307/* TKS print*,'QUAD(1),HEXA(1),DTRANS(1)=',QUAD(1),HEXA(1),DTRANS(1) */
23308L999:
23309 return ret_val;
23310} /* n2n2tks_ */
23311
23312#undef temp
23313#undef fnumin
23314#undef fnumax
23315#undef dnu
23316#undef slit
23317#undef dx
23318#undef rsilo
23319#undef omeg
23320#undef rsi
23321#undef rsigg
23322#undef nsol
23323#undef like
23324#undef ik1k0
23325#undef ibound
23326
23327#define wnrmax3 (app3a_1app3a_.wnrmax3)
23328#define rsilo (rsilo_1rsilo_.rsilo)
23329#define omeg (bba_2(bba_.m_2).omeg)
23330#define rsigg (bba_2(bba_.m_2).rsigg)
23331#define beta (bba_2(bba_.m_2).beta)
23332#define nsol (bbc_1bbc_.nsol)
23333#define ibound (bbb_1bbb_.ibound)
23334#define q1 (n2part_1(*(struct n2part_1_ *) &n2part_).q1)
23335#define wn2 (n2part_1(*(struct n2part_1_ *) &n2part_).wn2)
23336#define b01 (n2part_1(*(struct n2part_1_ *) &n2part_).b01)
23337#define d01 (n2part_1(*(struct n2part_1_ *) &n2part_).d01)
23338#define jrange2 (n2part_1(*(struct n2part_1_ *) &n2part_).jrange2)
23339
23340
23341
23342/* ########################################################################## */
23343
23344
23345/* Subroutine */ int addspec_(double *g0, double *ep, double *
23346 tau1, double *tau2, double *tau5, double *tau6,
23347 double *temp, int *nf, double *freq, double *abscoef,
23348 int * /* mp */, int *like, int *lambda1, int *lambda2,
23349 int *lambda, int * /* lvalue */)
23350{
23351 /* Initialized data */
23352
23353 static double closchm = 2.68675484e19;
23354 static double boltzwn = .6950304;
23355 static double hbar = 1.054588757e-27;
23356 static double pi = 3.1415926535898;
23357 static double clight = 2.997925e10;
23358
23359 /* Format strings */
23360 /*
23361 static char fmt_20[] = "(/\002 LAMBDA1,LAMBDA2, LAMBDA,LVALUE=\002,2i3,2"
23362 "x,2i3,\002 COMPONENT.\002/15x,\002LINE SHAPE PARAMETERS:\002,6d1"
23363 "2.3,5x,\002G(0)=\002,d12.3/)";
23364 */
23365
23366 /* System generated locals */
23367 int s__1, s__2, s__3, s__4, s__5, s__6;
23368 double d__1, d__2;
23369
23370 /* Builtin functions */
23371 /*
23372 integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void),
23373 s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen),
23374 e_wsle(void);
23375 */
23376
23377 /* Local variables */
23378 int list, jsum = 0;
23379 extern double bgama_(double *, double *, double *,
23380 double *, double *, double *, double *);
23381 int i__, j;
23382 double calib, p;
23383 int i1, j1, i2, j2;
23384 double p1, p2, omega1, omega2;
23385 int ip, jp, iq;
23386 double twopic;
23387 int jplusl, ip1, jp1, ip2, jp2;
23388 double fac, cgs, xbg, wkf, frq, wki;
23389 extern double specfct_(double *, double *, double *,
23390 double *, int *, double *), clebsqr_(int *,
23391 int *, int *);
23392 double cg1s, cg2s;
23393
23394 /* Fortran I/O blocks */
23395 /*
23396 static cilist io___38 = { 0, 6, 0, fmt_20, 0 };
23397 static cilist io___40 = { 0, 6, 0, 0, 0 };
23398 */
23399
23400
23401/* THIS PROGRAM GENERATES LISTING OF R-T CIA ALFA(OMEGA) */
23402/* IF EITHER LAMBDA1 OR LAMBDA2 EQUAL TO ZERO - SINGLE TRANSITIONS; */
23403/* DOUBLE TRANSITIONS ARE ASSUMED OTHERWISE. */
23404/* LIKE=1 FOR LIKE SYSTEMS (AS H2-H2), SET LIKE=0 ELSE. */
23405
23406/* COMMON/BB/OMEG(201),RSI(201),RSIGG(201),NSOL,BETA */
23407/* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
23408/* DIMENSION ABSCOEF(NF),FREQ(NF) */
23409 /* Parameter adjustments */
23410 --abscoef;
23411 --freq;
23412
23413 /* Function Body */
23414
23415 twopic = 2. * pi * clight;
23416 if (*like != 1) {
1
Assuming the condition is false
2
Taking false branch
23417 *like = 0;
23418 }
23419/* TAKE CARE OF FACTOR OF 1.E-60 HERE. */
23420/* Computing 2nd power */
23421 d__1 = pi;
23422/* Computing 2nd power */
23423 d__2 = closchm * 1e-30;
23424 calib = twopic * (d__1 * d__1 * 4. / (hbar * 3. * clight)) * (d__2 * d__2)
23425 ;
23426 calib /= (double) (*like + 1);
23427 beta = 1. / (boltzwn * *temp);
23428 list = *nf;
23429 s__1 = list;
23430 for (i__ = 1; i__ <= s__1; ++i__) {
3
Assuming 'i__' is <= 's__1'
4
Loop condition is true. Entering loop body
5
Assuming 'i__' is > 's__1'
6
Loop condition is false. Execution continues on line 23452
23431/* L88: */
23432 abscoef[i__] = 0.;
23433 }
23434
23435/* ROTATIONAL SPECTRUM FOR THE DETAILED LISTING ******************* */
23436 /*
23437 s_wsfe(&io___38);
23438 do_fio(&c__1, (char *)&(*lambda1), (ftnlen)sizeof(int));
23439 do_fio(&c__1, (char *)&(*lambda2), (ftnlen)sizeof(int));
23440 do_fio(&c__1, (char *)&(*lambda), (ftnlen)sizeof(int));
23441 do_fio(&c__1, (char *)&(*lvalue), (ftnlen)sizeof(int));
23442 do_fio(&c__1, (char *)&(*g0), (ftnlen)sizeof(double));
23443 do_fio(&c__1, (char *)&(*ep), (ftnlen)sizeof(double));
23444 do_fio(&c__1, (char *)&(*tau1), (ftnlen)sizeof(double));
23445 do_fio(&c__1, (char *)&(*tau2), (ftnlen)sizeof(double));
23446 do_fio(&c__1, (char *)&(*tau5), (ftnlen)sizeof(double));
23447 do_fio(&c__1, (char *)&(*tau6), (ftnlen)sizeof(double));
23448 d__1 = *g0 * bgama_(&c_b47, tau1, tau2, ep, tau5, tau6, temp);
23449 do_fio(&c__1, (char *)&d__1, (ftnlen)sizeof(double));
23450 e_wsfe();
23451 */
23452 if (*lambda1 == 0 || *lambda2 == 0) {
7
Assuming the condition is true
23453 goto L152;
8
Control jumps to line 23541
23454 }
23455 jplusl = jrange2 + max(*lambda1,*lambda2)((*lambda1) >= (*lambda2) ? (*lambda1) : (*lambda2));
23456
23457 /*
23458 s_wsle(&io___40);
23459 do_lio(&c__9, &c__1, "LAMBDA1,LAMBDA2,ABSCOEF(1)=", (ftnlen)27);
23460 do_lio(&c__2, &c__1, (char *)&(*lambda1), (ftnlen)sizeof(int));
23461 do_lio(&c__2, &c__1, (char *)&(*lambda2), (ftnlen)sizeof(int));
23462 do_lio(&c__5, &c__1, (char *)&abscoef[1], (ftnlen)sizeof(double));
23463 e_wsle();
23464 */
23465 jsum = 0;
23466 s__1 = jrange2;
23467 for (i1 = 1; i1 <= s__1; ++i1) {
23468 j1 = i1 - 1;
23469 s__2 = jplusl;
23470 for (ip1 = 1; ip1 <= s__2; ++ip1) {
23471 jp1 = ip1 - 1;
23472 cg1s = clebsqr_(&j1, lambda1, &jp1);
23473 if (cg1s <= 0.) {
23474 goto L150;
23475 } else {
23476 goto L130;
23477 }
23478L130:
23479 s__3 = j1 * (j1 + 1);
23480 p1 = (double) (2 * j1 + 1) * wn2[1 + j1 % 2 - 1] * exp(
23481 -1.4387859 / *temp * ((b01 - (double) s__3 * d01) * (
23482 double) s__3)) / q1;
23483 ++jsum;
23484 s__3 = jp1 * ip1;
23485 s__4 = j1 * i1;
23486 omega1 = (b01 - (double) s__3 * d01) * (double) s__3 - (
23487 b01 - (double) s__4 * d01) * (double) s__4;
23488 s__3 = jrange2;
23489 for (i2 = 1; i2 <= s__3; ++i2) {
23490 j2 = i2 - 1;
23491 s__4 = jplusl;
23492 for (ip2 = 1; ip2 <= s__4; ++ip2) {
23493 jp2 = ip2 - 1;
23494 cg2s = clebsqr_(&j2, lambda2, &jp2);
23495 if (cg2s <= 0.) {
23496 goto L148;
23497 } else {
23498 goto L132;
23499 }
23500L132:
23501 s__5 = j2 * (j2 + 1);
23502 p2 = (double) (2 * j2 + 1) * wn2[1 + j2 % 2 - 1] *
23503 exp(-1.4387859 / *temp * ((b01 - (double)
23504 s__5 * d01) * (double) s__5)) / q1;
23505 s__5 = jp2 * ip2;
23506 s__6 = j2 * i2;
23507 omega2 = (b01 - (double) s__5 * d01) * (double)
23508 s__5 - (b01 - (double) s__6 * d01) * (
23509 double) s__6;
23510 fac = calib * p1 * p2 * cg1s * cg2s;
23511 s__5 = list;
23512 for (i__ = 1; i__ <= s__5; ++i__) {
23513 frq = freq[i__] - omega1 - omega2;
23514 wki = freq[i__] * (1. - exp(-beta * freq[i__]));
23515 wkf = wki * fac;
23516 xbg = *g0 * bgama_(&frq, tau1, tau2, ep, tau5, tau6,
23517 temp);
23518 if (ibound == 0) {
23519 goto L555;
23520 }
23521 if (abs(frq)((frq) >= 0 ? (frq) : -(frq)) <= wnrmax3) {
23522 xbg += specfct_(&frq, omeg, rsilo, rsigg, &nsol, &
23523 beta);
23524 }
23525L555:
23526 abscoef[i__] += xbg * wkf;
23527/* L146: */
23528 }
23529L148:
23530 ;
23531 }
23532 }
23533L150:
23534 ;
23535 }
23536 }
23537 goto L2222;
23538/* SINGLE TRANSITIONS AT NITROGEN'S ROTATIONAL FREQUENCIES */
23539/* ======================================================= */
23540L152:
23541 jplusl = jrange2 + *lambda;
23542 s__2 = jrange2;
23543 for (i__ = 1; i__ <= s__2; ++i__) {
9
Assuming 'i__' is <= 's__2'
10
Loop condition is true. Entering loop body
23544 j = i__ - 1;
23545 s__1 = jplusl;
23546 for (ip = 1; ip <= s__1; ++ip) {
11
Assuming 'ip' is <= 's__1'
12
Loop condition is true. Entering loop body
23547 jp = ip - 1;
23548 cgs = clebsqr_(&j, lambda, &jp);
23549 if (cgs <= 0.) {
13
Taking false branch
23550 goto L200;
23551 } else {
23552 goto L210;
14
Control jumps to line 23555
23553 }
23554L210:
23555 s__4 = j * (j + 1);
23556 p = (double) (2 * j + 1) * wn2[1 + j % 2 - 1] * exp(
23557 -1.4387859 / *temp * ((b01 - (double) s__4 * d01) * (
23558 double) s__4)) / q1;
23559 ++jsum;
23560 s__4 = jp * ip;
23561 s__3 = j * i__;
23562 omega1 = (b01 - (double) s__4 * d01) * (double) s__4 - (
23563 b01 - (double) s__3 * d01) * (double) s__3;
23564 fac = calib * p * cgs;
23565 s__4 = list;
23566 for (iq = 1; iq <= s__4; ++iq) {
15
Loop condition is true. Entering loop body
23567 frq = freq[iq] - omega1;
23568/* XWKI=FREQ(IQ)*(1.-EXP(-BETA*FREQ(IQ))) */
23569 wki = freq[iq] * (1. - exp(-beta * freq[iq]));
23570 wkf = wki * fac;
23571 xbg = *g0 * bgama_(&frq, tau1, tau2, ep, tau5, tau6, temp);
23572 if (ibound == 0) {
16
Assuming the condition is false
17
Taking false branch
23573 goto L444;
23574 }
23575 if (abs(frq)((frq) >= 0 ? (frq) : -(frq)) <= wnrmax3) {
18
'?' condition is false
19
Taking true branch
23576 xbg += specfct_(&frq, omeg, rsilo, rsigg, &nsol, &beta);
20
Calling 'specfct_'
23577 }
23578L444:
23579 abscoef[iq] += xbg * wkf;
23580/* L199: */
23581 }
23582L200:
23583 ;
23584 }
23585 }
23586
23587L2222:
23588/* TKS 2222 PRINT 44,(ABSCOEF(I),I=1,LIST) */
23589/* L44: */
23590 return 0;
23591} /* addspec_ */
23592
23593#undef wnrmax3
23594#undef rsilo
23595#undef omeg
23596#undef rsigg
23597#undef beta
23598#undef nsol
23599#undef ibound
23600#undef q1
23601#undef wn2
23602#undef b01
23603#undef d01
23604#undef jrange2
23605
23606#define q (n2part_2(*(struct n2part_2_ *) &n2part_).q)
23607#define wn2 (n2part_2(*(struct n2part_2_ *) &n2part_).wn2)
23608#define b0 (n2part_2(*(struct n2part_2_ *) &n2part_).b0)
23609#define d0 (n2part_2(*(struct n2part_2_ *) &n2part_).d0)
23610#define jrange1 (n2part_2(*(struct n2part_2_ *) &n2part_).jrange1)
23611
23612/* Subroutine */ int partsum_(double *temp)
23613{
23614 /* System generated locals */
23615 int s__1;
23616
23617 /* Local variables */
23618 int j;
23619 double dq;
23620
23621/* N2 ROTATIONAL PARTITION SUM Q = Q(T). */
23622
23623
23624
23625/* Q,B0,D0,WN2 - PARTITION FCT., ROT.CONSTANTS, WEIGHTS FOR N2 */
23626 q = 0.;
23627 j = 0;
23628L50:
23629 s__1 = j * (j + 1);
23630 dq = (double) (2 * j + 1) * wn2[1 + j % 2 - 1] * exp(-1.4387859 * ((
23631 b0 - (double) s__1 * d0) * (double) s__1) / *temp);
23632 q += dq;
23633 ++j;
23634 if (dq > q / 900.) {
23635 goto L50;
23636 }
23637 jrange1 = j;
23638/* TKS PRINT 30, Q, JRANGE1 */
23639
23640/* L30: */
23641 return 0;
23642} /* partsum_ */
23643
23644#undef q
23645#undef wn2
23646#undef b0
23647#undef d0
23648#undef jrange1
23649
23650#define slit (app3a_1app3a_.slit)
23651#define dx (app3a_1app3a_.dx)
23652#define wnrmax3 (app3a_1app3a_.wnrmax3)
23653#define nsri (app3b_1app3b_.nsri)
23654#define ns (app3b_1app3b_.ns)
23655#define nsriup (app3b_1app3b_.nsriup)
23656#define rsi (bl3_1(bl3_.m_1).rsi)
23657
23658/* Subroutine */ int profile_(double *x, double *y)
23659{
23660 /* System generated locals */
23661 int s__1;
23662
23663 /* Local variables */
23664 int i__;
23665 double slope;
23666 int n1;
23667 double x0;
23668 int nc;
23669 double dr;
23670 int no;
23671 double xi;
23672 int nu;
23673
23674/* A TRIANGULAR SLIT FUNCTION IS USED. */
23675
23676
23677/* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
23678
23679 if (*y < 0.) {
23680 goto L105;
23681 } else if (*y == 0) {
23682 goto L106;
23683 } else {
23684 goto L1;
23685 }
23686L1:
23687 x0 = nsri + 1. + *x / dx;
23688 nc = (int) x0;
23689 n1 = nc + 1;
23690 slope = *y / slit;
23691 nu = (int) (x0 - ns);
23692 if (nu < 1) {
23693 nu = 1;
23694 }
23695 if (nu > nsriup) {
23696 return 0;
23697 }
23698 no = (int) (x0 + ns);
23699 if (no > nsriup) {
23700 no = nsriup;
23701 }
23702 if (no < 1) {
23703 return 0;
23704 }
23705 if (nc > nsriup) {
23706 nc = nsriup;
23707 }
23708 if (nc <= 1) {
23709 goto L101;
23710 }
23711 s__1 = nc;
23712 for (i__ = nu; i__ <= s__1; ++i__) {
23713 xi = (i__ - 1.) * dx - wnrmax3;
23714 dr = slope * (xi - (*x - slit));
23715 if (dr <= 0.) {
23716 goto L100;
23717 }
23718 rsi[i__ - 1] += dr;
23719L100:
23720 ;
23721 }
23722L101:
23723
23724 if (nc >= nsriup) {
23725 return 0;
23726 }
23727 if (n1 < 1) {
23728 n1 = 1;
23729 }
23730 s__1 = no;
23731 for (i__ = n1; i__ <= s__1; ++i__) {
23732 xi = (i__ - 1.) * dx - wnrmax3;
23733 dr = *y - slope * (xi - *x);
23734 if (dr <= 0.) {
23735 goto L102;
23736 }
23737 rsi[i__ - 1] += dr;
23738L102:
23739 ;
23740 }
23741 return 0;
23742L105:
23743/* TKS 105 PRINT 10,SLIT */
23744/* TKS 10 FORMAT(/' A TRIANGULAR SLIT FUNCTION OF',F6.3,' CM-1 HALFWIDTH IS */
23745/* TKS ' USED'/) */
23746L106:
23747 return 0;
23748} /* profile_ */
23749
23750#undef slit
23751#undef dx
23752#undef wnrmax3
23753#undef nsri
23754#undef ns
23755#undef nsriup
23756#undef rsi
23757
23758
23759/* X FUNCTION SPECFCT(FREQ,OMEGA,PHI,PHI2,N,RTEMP) */
23760
23761double specfct_(double *freq, double *omega, double *phi,
23762 double *phi2, int *n, double *rtemp)
23763{
23764 /* System generated locals */
23765 double ret_val;
23766
23767 /* Local variables */
23768 double tfac, f, gp, si;
21
'gp' declared without an initial value
23769 int nr;
23770 extern /* Subroutine */ int ixpolat_(int *, int *, int *,
23771 double *, double *, double *, double *,
23772 double *, double *, int *, double *);
23773
23774
23775/* THIS INTERPOLATES THE SPECTRAL FUNCTION PHI(FREQ) DEFINED AT */
23776/* OMEGA(N) AS PHI(N). PHI2 IS THE SECOND DERIVATIVE AT OMEGA */
23777/* WHICH MUST BE OBTAINED FIRST (USE SPLINE FOR THAT PURPOSE). */
23778/* RTEMP IS THE RECIPROCAL TEMPERATURE IN CM-1 UNITS. */
23779/* NOTE THAT WE INTERPOLATE 1.E80 TIMES THE LOGARITHM OF PHI(OMEGA) */
23780/* NOTE THAT IN GSO'S REVISION, THIS FACTOR IS REMOVED. */
23781/* (REVISION MODIFIED) */
23782
23783
23784
23785/* PRINT*,'FREQ =',FREQ */
23786/* PRINT*,'OMEGA=',OMEGA */
23787/* PRINT*,'RTEMP=',RTEMP */
23788/* PRINT*,'PHI =',PHI */
23789/* PRINT*,'PHI2 =',PHI2 */
23790 /* Parameter adjustments */
23791 --phi2;
23792 --phi;
23793 --omega;
23794
23795 /* Function Body */
23796 tfac = 0.;
23797 f = *freq;
23798 if (f >= 0.) {
22
Taking true branch
23799 goto L20;
23
Control jumps to line 23807
23800 } else {
23801 goto L10;
23802 }
23803L10:
23804 f = abs(f)((f) >= 0 ? (f) : -(f));
23805 tfac = -(*rtemp) * f;
23806L20:
23807 if (f <= omega[*n]) {
24
Taking true branch
23808 goto L30;
25
Control jumps to line 23820
23809 }
23810 ret_val = exp(-(phi[*n - 1] - phi[*n]) * (f - omega[*n]) / (omega[*n] -
23811 omega[*n - 1]) + phi[*n] + tfac) * 1e-80;
23812/* print*,' (A) SPECFCT=',SPECFCT */
23813/* X SPECFCT=DEXP(-(PHI(N-1)-PHI(N))*(F-OMEGA(N))/ */
23814/* X $(OMEGA(N)-OMEGA(N-1))+PHI(N)+TFAC) */
23815 return ret_val;
23816/* 30 PRINT*,'SI,NR,PHI2=', */
23817/* & SI,NR,PHI2 */
23818/* CALL IXPOLAT(N,1,0,1.D-6,OMEGA,PHI,F,GP,SI,NR,PHI2) */
23819L30:
23820 ixpolat_(n, &cs__1, &cs__0, &c_b183, &omega[1], &phi[1], &f, &gp, &si, &
26
Calling 'ixpolat_'
39
Returning from 'ixpolat_'
23821 nr, &phi2[1]);
23822 ret_val = exp(tfac + gp) * 1e-80;
40
The right operand of '+' is a garbage value
23823/* X SPECFCT=DEXP(TFAC+GP) */
23824/* print*,' (B) GP,SPECFCT=',GP,SPECFCT */
23825
23826 return ret_val;
23827} /* specfct_ */
23828#define slit (app3a_1app3a_.slit)
23829#define dx (app3a_1app3a_.dx)
23830#define wnrmax3 (app3a_1app3a_.wnrmax3)
23831#define nsri (app3b_1app3b_.nsri)
23832#define ns (app3b_1app3b_.ns)
23833#define nsriup (app3b_1app3b_.nsriup)
23834#define eb (energ_1(*(struct energ_1_ *) &energ_).eb)
23835#define niv (energ_1(*(struct energ_1_ *) &energ_).niv)
23836#define nlines (dimer_1dimer_.nlines)
23837#define rsibb (bl3_2(bl3_.m_2).rsibb)
23838#define ldelvi (bbbb_2(bbbb_.m_2).ldelvi)
23839#define ivi (bbbb_2(bbbb_.m_2).ivi)
23840#define ivip (bbbb_2(bbbb_.m_2).ivip)
23841#define ldelel (bbbb_2(bbbb_.m_2).ldelel)
23842#define ll (bbbb_2(bbbb_.m_2).ll)
23843#define llp (bbbb_2(bbbb_.m_2).llp)
23844
23845/* Subroutine */ int bound32_(double *temp, double *rsi, int *
23846 nsol)
23847{
23848 /* Initialized data */
23849
23850 static int ldelvis[63] = { 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,
23851 1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,
23852 3,4,4,4,4,4,4,4,4 };
23853 static int ivis[63] = { 0,0,1,1,2,2,3,3,4,4,0,0,0,0,1,1,1,1,2,2,2,2,
23854 3,3,3,3,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,0,1,2,0,1,2,0,1,0,1,0,1,2,
23855 0,1,0,1,0,1,0,1 };
23856 static int ivips[63] = { 0,0,1,1,2,2,3,3,4,4,1,1,1,1,2,2,2,2,3,3,3,3,
23857 4,4,4,4,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,3,4,5,3,4,5,3,4,3,4,3,4,5,
23858 4,5,4,5,4,5,4,5 };
23859 static int ldelels[63] = { 1,3,1,3,1,3,1,3,1,3,-3,-1,1,3,-3,-1,1,3,
23860 -3,-1,1,3,3,1,-1,-3,-3,-1,1,3,-3,-1,1,3,-3,-1,1,3,-1,-3,1,3,1,1,1,
23861 -1,-1,-1,-3,-3,3,3,-3,-3,-3,-3,-3,3,3,1,1,-1,-1 };
23862 static double as[63] = { 4.4844e-40,4.4356e-40,2.9345e-40,2.885e-40,
23863 1.6441e-40,1.5899e-40,7.2882e-41,6.7748e-41,1.0378e-41,1.3041e-42,
23864 1.5006e-41,1.537e-41,1.6139e-41,1.7143e-41,1.9985e-41,2.0169e-41,
23865 2.0994e-41,2.2094e-41,1.636e-41,1.6281e-41,1.6714e-41,1.7326e-41,
23866 8.0425e-42,8.0862e-42,8.0093e-42,8.1366e-42,2.4471e-42,2.5406e-42,
23867 2.6629e-42,2.8064e-42,4.6227e-42,4.715e-42,4.8513e-42,5.0133e-42,
23868 3.9968e-42,3.984e-42,3.981e-42,3.9687e-42,1.1806e-42,1.3458e-42,
23869 3.8746e-42,3.9219e-42,7.3334e-43,1.339e-42,1.3041e-42,7.1401e-43,
23870 1.3461e-42,6.5776e-43,6.9847e-43,1.3517e-42,7.5545e-43,1.3268e-42,
23871 6.9847e-43,1.3517e-42,7.464e-43,2.1322e-43,2.6037e-43,2.0823e-43,
23872 2.0632e-43,2.1067e-43,2.0531e-43,2.1218e-43,2.3006e-43 };
23873 static double bs[63] = { 4.3e-4,4.6e-4,8.3e-4,8.9e-4,.0017,.00186,
23874 .0041,.00457,0.,0.,9.99e-4,5.23e-4,1.49e-4,-1.68e-4,.001837,
23875 .001153,6.6e-4,2.54e-4,.003603,.002677,.002101,.001738,.00595,
23876 .006843,0.,.007035,.001025,6.42e-4,2.54e-4,-1.64e-4,.002342,
23877 .001975,.00164,.001328,.004943,.004999,.005461,.006839,0.,.010993,
23878 0.,0.,.001367,.005262,0.,.001601,.00451,0.,.001828,.004175,.04816,
23879 .007033,.001828,.004175,.009338,.003733,.008508,.006979,0.,
23880 .005035,0.,.004169,0. };
23881 static double twopic = 1.88365183e11;
23882 static double pi = 3.141592654;
23883
23884 /* System generated locals */
23885 int s__1;
23886 double d__1;
23887
23888 /* Local variables */
23889 double alfa;
23890 int nnii;
23891 //int nsol2;
23892 double a, b;
23893 int i__, l, n;
23894 double stoke, stoki, am, pf;
23895 int lp;
23896 double rm;
23897 int nr, iv;
23898 double stokip;
23899 int ivp;
23900 extern double clebsqr_(int *, int *, int *);
23901 extern /* Subroutine */ int profile_(double *, double *);
23902
23903
23904#define eb_ref(a_1,a_2) eb[(a_2)*41 + a_1 - 42]
23905
23906
23907
23908/* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
23909
23910
23911/* STORED VALUES */
23912 /* Parameter adjustments */
23913 --rsi;
23914
23915 /* Function Body */
23916
23917
23918/* EB(I,K) - BOUND ENERGIES */
23919/* AM = (MTX.EL. (L,BETA,L') )**2 */
23920/* M(L,L',V,V') OF PAPER (*) ARE TO BE CORRECTED: */
23921/* M(L,L',V,V') = AM * (2L+1) * C(L,3,L')**2 */
23922/* NSRI - HOW MANY POINTS FOR B-B SPECTRAL FUNCTION TO BE GIVEN */
23923/* WNRMAX3 - THE FREQUENCY RANGE OF B-B CONTRIBUTION */
23924/* SLIT- THE HALFWIDTH OF THE SPECTRAL PROFILE CONVOLUTED WITH */
23925/* B-B SPECTRUM, IN [CM-1]. */
23926/* A,B, COEFFICIENTS , EQ. 7, A.BORYSOW, L.FROMMHOLD, */
23927/* AP. J. VOL.311, 1043-1057, (1986) */
23928
23929 nsri = 190;
23930 wnrmax3 = 45.;
23931 nsriup = (nsri << 1) + 1;
23932 dx = wnrmax3 / (double) nsri;
23933 ns = (int) (slit / dx);
23934
23935 for (i__ = 1; i__ <= 401; ++i__) {
23936/* L300: */
23937 rsibb[i__ - 1] = 0.;
23938 }
23939
23940 alfa = 1. / (*temp * .69519);
23941 rm = 2.32498211e-23;
23942/* RM - REDUCED MASS FOR N2-N2 */
23943
23944 d__1 = rm * 1.380662e-16 * *temp * 2. * pi / 4.3906208382975998e-53;
23945 pf = pow(d__1, c_b186);
23946/* SCALE DOWN BY 1.D60 */
23947 pf *= 1e-60;
23948
23949 nr = 0;
23950L555:
23951 ++nr;
23952 ldelvi = ldelvis[nr - 1];
23953 ivi = ivis[nr - 1];
23954 ivip = ivips[nr - 1];
23955 ldelel = ldelels[nr - 1];
23956 a = as[nr - 1];
23957 b = bs[nr - 1];
23958/* WRITE (6,334) LDELVI,IVI,IVIP, LDELEL,A,B */
23959/* L334: */
23960
23961/* LDELVI=DELTA(V)=V'-V */
23962/* IVI = V; IVIP = V' */
23963/* LDELEL = DELTA(L) = L'-L */
23964
23965 iv = ivi + 1;
23966 ivp = ivip + 1;
23967/* THESE ARE ENERGY COLUMNS (V, V') */
23968
23969 nnii = niv[iv - 1];
23970
23971 s__1 = nnii;
23972 for (l = 1; l <= s__1; ++l) {
23973/* LOOP OVER INITIAL L-VALUES... */
23974
23975 am = a * exp(-b * (double) ((l - 1) * l));
23976/* L - NUMBER OF ROW, (L-1) - ROTATIONAL LEVEL */
23977 lp = l + ldelel;
23978 ll = l - 1;
23979 llp = lp - 1;
23980/* LL,LLP ARE INITIAL L AND FINAL L' ANGULAR MOMENTUM QUANTUM NUMBERS */
23981
23982 if (lp > niv[ivp - 1] || lp < 1) {
23983 goto L20;
23984 }
23985 if (eb_ref(lp, ivp) == 0.) {
23986 goto L20;
23987 }
23988 if (eb_ref(l, iv) == 0.) {
23989 goto L20;
23990 }
23991 stoke = eb_ref(lp, ivp) - eb_ref(l, iv);
23992
23993 stoki = am * exp(-alfa * eb_ref(l, iv)) / pf * (double) ((ll << 1)
23994 + 1) * clebsqr_(&ll, &cs__3, &llp);
23995
23996 profile_(&stoke, &stoki);
23997 if (stoki > 0.) {
23998 ++nlines;
23999 }
24000
24001 stokip = am * exp(-alfa * eb_ref(lp, ivp)) / pf * (double) ((llp
24002 << 1) + 1) * clebsqr_(&llp, &cs__3, &ll);
24003
24004 d__1 = -stoke;
24005 profile_(&d__1, &stokip);
24006 if (stokip > 0.) {
24007 ++nlines;
24008 }
24009
24010L20:
24011 ;
24012 }
24013 if (nr == 63) {
24014 goto L56;
24015 }
24016 goto L555;
24017L56:
24018
24019/* 32 ENTRIES FOR (3220)+(3202) IN TABLE 6, 63 IN ALL: */
24020/* DATA EXPANDED AND INCLUDE NOW ALL POSSIBLE B-B TRANSITIONS */
24021
24022 s__1 = nsriup;
24023 for (n = 1; n <= s__1; ++n) {
24024/* L90: */
24025 rsibb[n - 1] = rsibb[n - 1] / twopic / slit;
24026 }
24027
24028 *nsol = nsri + 1;
24029 //nsol2 = *nsol + 1;
24030/* RSI - CONTRIBUTION FOR POSITIVE FREQUENCY SHIFTS */
24031
24032 s__1 = *nsol;
24033 for (i__ = 1; i__ <= s__1; ++i__) {
24034/* L22: */
24035 rsi[i__] = rsibb[*nsol - 1 + i__ - 1];
24036 }
24037
24038/* PRINT 999, (RSI(I),I=1,NSOL) */
24039/* L999: */
24040
24041 return 0;
24042} /* bound32_ */
24043
24044#undef slit
24045#undef dx
24046#undef wnrmax3
24047#undef nsri
24048#undef ns
24049#undef nsriup
24050#undef eb
24051#undef niv
24052#undef nlines
24053#undef rsibb
24054#undef ldelvi
24055#undef ivi
24056#undef ivip
24057#undef ldelel
24058#undef ll
24059#undef llp
24060
24061
24062#undef eb_ref
24063
24064#define slit (app3a_1app3a_.slit)
24065#define dx (app3a_1app3a_.dx)
24066#define wnrmax3 (app3a_1app3a_.wnrmax3)
24067#define nsri (app3b_1app3b_.nsri)
24068#define ns (app3b_1app3b_.ns)
24069#define nsriup (app3b_1app3b_.nsriup)
24070#define eb (energ_1(*(struct energ_1_ *) &energ_).eb)
24071#define niv (energ_1(*(struct energ_1_ *) &energ_).niv)
24072#define nlines (dimer_1dimer_.nlines)
24073#define rsibb (bl3_2(bl3_.m_2).rsibb)
24074
24075/* Subroutine */ int bound54_(double *temp, double *rsi, int *
24076 nsol)
24077{
24078 /* Initialized data */
24079
24080// static int ldelvis[54] = { 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
24081// 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
24082// };
24083 static int ivis[54] = { 0,0,0,1,1,1,2,2,2,3,3,3,0,0,0,0,0,0,1,1,1,1,
24084 1,1,2,2,2,2,2,2,3,3,3,3,3,3,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2 };
24085 static int ivips[54] = { 0,0,0,1,1,1,2,2,2,3,3,3,1,1,1,1,1,1,2,2,2,2,
24086 2,2,3,3,3,3,3,3,4,4,4,4,4,4,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4 };
24087 static int ldelels[54] = { 1,3,5,1,3,5,1,3,5,1,3,5,-5,-3,-1,1,3,5,-5,
24088 -3,-1,1,3,5,-5,-3,-1,1,3,5,-5,-3,-1,1,3,5,-5,-3,-1,1,3,5,-5,-3,-1,
24089 1,3,5,-5,-3,-1,1,3,5 };
24090 static double as[54] = { 7.9332e-42,7.8207e-42,7.7235e-42,4.5815e-42,
24091 4.4834e-42,4.4059e-42,2.173e-42,2.0824e-42,2.025e-42,7.7222e-43,
24092 7.0351e-43,6.6815e-43,4.9611e-43,5.2232e-43,5.2979e-43,5.4652e-43,
24093 5.6827e-43,5.9277e-43,5.733e-43,6.062e-43,6.0862e-43,6.2104e-43,
24094 6.3809e-43,6.5698e-43,3.9501e-43,4.1599e-43,4.1033e-43,4.1097e-43,
24095 4.1339e-43,4.153e-43,1.5858e-43,1.5976e-43,1.5478e-43,1.5066e-43,
24096 1.4554e-43,1.3848e-43,9.9241e-44,1.0109e-43,1.0396e-43,1.0758e-43,
24097 1.1176e-43,1.1636e-43,1.646e-43,1.647e-43,1.6617e-43,1.6837e-43,
24098 1.7085e-43,1.7327e-43,1.1797e-43,1.1593e-43,1.1405e-43,1.1174e-43,
24099 1.0853e-43,1.0401e-43 };
24100 static double bs[54] = { 6.12e-4,6.35e-4,6.77e-4,.001137,.001201,
24101 .001341,.00229,.002449,.00287,.005426,.005876,.00745,.001,8.83e-4,
24102 6.09e-4,3.92e-4,2.07e-4,3.7e-5,.001625,.001624,.001305,.001084,
24103 9.27e-4,8.21e-4,.002978,.003273,.002994,.002954,.003153,.003668,
24104 .005799,.006423,.006733,.00796,.010937,.019179,.001229,9.93e-4,
24105 7.67e-4,5.43e-4,3.09e-4,5.1e-5,.002456,.0023,.00221,.002193,
24106 .002273,.002506,.004556,.004825,.005454,.006725,.009431,.016672 };
24107 static double twopic = 1.88365183e11;
24108 static double pi = 3.141592654;
24109
24110 /* System generated locals */
24111 int s__1;
24112 double d__1;
24113
24114 /* Local variables */
24115 double alfa;
24116 int nnii, ivip;
24117 //int nsol2;
24118 double a, b;
24119 int i__, l, n;
24120 double stoke, stoki, am, pf;
24121 int ll, lp;
24122 double rm;
24123 int nr, ldelel, iv;
24124 //int ldelvi;
24125 double stokip;
24126 int ivi, llp, ivp;
24127 extern double clebsqr_(int *, int *, int *);
24128 extern /* Subroutine */ int profile_(double *, double *);
24129
24130
24131#define eb_ref(a_1,a_2) eb[(a_2)*41 + a_1 - 42]
24132
24133
24134
24135/* COMMON/APP3/SLIT,DX,NSRI,WNRMAX3,NS,NSRIUP */
24136/* STORED VALUES */
24137
24138/* TKS THIS DATA STRUCTURE HAS 55 ENTRIES AND NOT 54!! */
24139/* TKS DATA LDELVIS /0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, */
24140/* TKS & 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2, */
24141/* TKS & 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2/ */
24142/* TKS WE HAVE SSKIPPED THE LAST "2" IN THIS DATA STATEMENT */
24143 /* Parameter adjustments */
24144 --rsi;
24145
24146 /* Function Body */
24147
24148
24149
24150
24151
24152
24153
24154
24155 nsri = 190;
24156 wnrmax3 = 47.;
24157 nsriup = (nsri << 1) + 1;
24158 dx = wnrmax3 / (double) nsri;
24159 ns = (int) (slit / dx);
24160
24161 for (i__ = 1; i__ <= 401; ++i__) {
24162/* L300: */
24163 rsibb[i__ - 1] = 0.;
24164 }
24165 alfa = 1. / (*temp * .69519);
24166 rm = 2.32498211e-23;
24167/* RM - REDUCED MASS FOR N2-N2 */
24168
24169 d__1 = rm * 1.380662e-16 * *temp * 2. * pi / 4.3906208382975998e-53;
24170 pf = pow(d__1, c_b186);
24171/* SCALE DOWNWARD BY 1.D60 */
24172 pf *= 1e-60;
24173
24174 nr = 0;
24175L555:
24176 ++nr;
24177 //ldelvi = ldelvis[nr - 1];
24178 ivi = ivis[nr - 1];
24179 ivip = ivips[nr - 1];
24180 ldelel = ldelels[nr - 1];
24181 a = as[nr - 1];
24182 b = bs[nr - 1];
24183/* WRITE (6,334) LDELVI,IVI,IVIP, LDELEL,A,B */
24184/* L334: */
24185/* LDELVI=DELTA(V)=V'-V */
24186/* IVI = V */
24187/* LDELEL = DELTA(L) = L'-L */
24188
24189 iv = ivi + 1;
24190 ivp = ivip + 1;
24191 nnii = niv[iv - 1];
24192 s__1 = nnii;
24193 for (l = 1; l <= s__1; ++l) {
24194 am = a * exp(-b * (double) (l * (l + 1)));
24195 lp = l + ldelel;
24196 ll = l - 1;
24197 llp = lp - 1;
24198 if (lp > niv[ivp - 1] || lp < 1) {
24199 goto L20;
24200 }
24201 if (eb_ref(lp, ivp) == 0.) {
24202 goto L20;
24203 }
24204 if (eb_ref(l, iv) == 0.) {
24205 goto L20;
24206 }
24207
24208 stoke = eb_ref(lp, ivp) - eb_ref(l, iv);
24209 stoki = am * exp(-alfa * eb_ref(l, iv)) / pf * (double) ((ll << 1)
24210 + 1) * clebsqr_(&ll, &cs__5, &llp);
24211 profile_(&stoke, &stoki);
24212 if (stoki > 0.) {
24213 ++nlines;
24214 }
24215 stokip = am * exp(-alfa * eb_ref(lp, ivp)) / pf * (double) ((llp
24216 << 1) + 1) * clebsqr_(&llp, &cs__5, &ll);
24217 d__1 = -stoke;
24218 profile_(&d__1, &stokip);
24219 if (stokip > 0.) {
24220 ++nlines;
24221 }
24222L20:
24223 ;
24224 }
24225 if (nr == 54) {
24226 goto L56;
24227 }
24228
24229 goto L555;
24230L56:
24231/* 54 ENTRIES FOR (5440)=(5404) IN TABLE 6 */
24232
24233 s__1 = nsriup;
24234 for (n = 1; n <= s__1; ++n) {
24235/* L90: */
24236 rsibb[n - 1] = rsibb[n - 1] / twopic / slit;
24237 }
24238
24239 *nsol = nsri + 1;
24240 //nsol2 = *nsol + 1;
24241
24242 s__1 = *nsol;
24243 for (i__ = 1; i__ <= s__1; ++i__) {
24244/* L22: */
24245 rsi[i__] = rsibb[*nsol - 1 + i__ - 1];
24246 }
24247
24248/* PRINT 999, (RSI(I),I=1,NSOL) */
24249/* L999: */
24250
24251 return 0;
24252} /* bound54_ */
24253
24254#undef slit
24255#undef dx
24256#undef wnrmax3
24257#undef nsri
24258#undef ns
24259#undef nsriup
24260#undef eb
24261#undef niv
24262#undef nlines
24263#undef rsibb
24264
24265
24266#undef eb_ref
24267
24268
24269double clebsqr_0_(int n__, int *l, int *lambda, int *lp)
24270{
24271 /* System generated locals */
24272 int s__1, s__2;
24273 double ret_val, d__1;
24274
24275 /* Local variables */
24276 extern double fctl_(int *);
24277 double f;
24278 int i__;
24279 double p;
24280 int i0, i1;
24281 double fc;
24282
24283/* SQUARE OF CLEBSCH-GORDAN COEFFICIENT (L,LAMBDA,0,0;LP,0) */
24284/* FOR INTEGER ARGUMENTS ONLY */
24285/* NOTE THAT LAMBDA SHOULD BE SMALL, MAYBE @10 OR SO. */
24286
24287
24288 switch(n__) {
24289 case 1: goto L_threej2;
24290 }
24291
24292 fc = (double) ((*lp << 1) + 1);
24293 goto L2;
24294
24295
24296L_threej2:
24297/* THIS ENTRY RETURNS THE SQUARED 3-J SYMBOL L LAMBDA LP */
24298/* 0 0 0 */
24299/* INSTEAD OF THE CLEBSCH-GORDAN COEFFICIENT */
24300/* (LIMITATION TO INTEGER ARGUMENTS ONLY) */
24301
24302/* NOTE THAT THE THREE-J SYMBOLS ARE COMPLETELY SYMMETRIC IN THE */
24303/* ARGUMENTS. IT WOULD BE ADVANTAGEOUS TO REORDER THE INPUT ARGUMENT */
24304/* LIST SO THAT LAMBDA BECOMES THE SMALLEST OF THE 3 ARGUMENTS. */
24305 fc = 1.;
24306L2:
24307 ret_val = 0.;
24308 if (*l + *lambda < *lp || *lambda + *lp < *l || *l + *lp < *lambda) {
24309 return ret_val;
24310 }
24311 if ((*l + *lp + *lambda) % 2 != 0) {
24312 return ret_val;
24313 }
24314 if (*l < 0 || *lp < 0 || *lambda < 0) {
24315 return ret_val;
24316 }
24317 f = 1. / (double) (*l + *lp + 1 - *lambda);
24318 if (*lambda == 0) {
24319 goto L22;
24320 }
24321 i1 = (*l + *lp + *lambda) / 2;
24322 i0 = (*l + *lp - *lambda) / 2 + 1;
24323 s__1 = i1;
24324 for (i__ = i0; i__ <= s__1; ++i__) {
24325/* L20: */
24326 f = f * (double) i__ / (double) (((i__ << 1) + 1) << 1);
24327 }
24328L22:
24329 s__1 = *lambda + *l - *lp;
24330 s__2 = *lambda + *lp - *l;
24331 p = fc * f * fctl_(&s__1) * fctl_(&s__2);
24332 s__1 = (*lambda + *l - *lp) / 2;
24333 s__2 = (*lambda + *lp - *l) / 2;
24334/* Computing 2nd power */
24335 d__1 = fctl_(&s__1) * fctl_(&s__2);
24336 ret_val = p / (d__1 * d__1);
24337 return ret_val;
24338} /* clebsqr_ */
24339
24340double clebsqr_(int *l, int *lambda, int *lp)
24341{
24342 return clebsqr_0_(0, l, lambda, lp);
24343 }
24344
24345double fctl_(int *n)
24346{
24347 /* System generated locals */
24348 int s__1;
24349 double ret_val, d__1;
24350
24351 /* Local variables */
24352 int i__, j;
24353 double z__;
24354
24355
24356
24357 ret_val = 1.;
24358 if (*n <= 1) {
24359 return ret_val;
24360 }
24361 if (*n > 15) {
24362 goto L20;
24363 }
24364 j = 1;
24365 s__1 = *n;
24366 for (i__ = 2; i__ <= s__1; ++i__) {
24367/* L10: */
24368 j *= i__;
24369 }
24370 ret_val = (double) j;
24371 return ret_val;
24372L20:
24373 z__ = (double) (*n + 1);
24374 d__1 = z__ - .5;
24375 ret_val = exp(-z__) * pow(z__, d__1) * ((((-2.294720936e-4 / z__ -
24376 .00268132716) / z__ + .003472222222) / z__ + .08333333333) / z__
24377 + 1.) * 2.506628274631;
24378 return ret_val;
24379} /* fctl_ */
24380#define ik1k0 (k1k0_1k1k0_.ik1k0)
24381
24382double bgama_(double *fnu, double *t1, double *t2, double
24383 *eps, double *t3, double *t4, double *temp)
24384{
24385 /* Initialized data */
24386
24387 static double pi = 3.1415926535898;
24388 static double clight = 29979245800.;
24389 static double hbar = 1.0545887e-27;
24390 static double boltz = 1.380662e-16;
24391
24392 /* System generated locals */
24393 double ret_val, d__1, d__2, d__3, d__4;
24394
24395 /* Local variables */
24396 double omega, z__, k0, t0, bgambc, zp, xk1;
24397
24398/* SPECTRAL FUNCTION "EBC", FOR REFERENCE: */
24399/* SEE "PHENOMENA INDUCED BY INTERMOLECULAR INTERACTIONS", */
24400/* ED. G. BIRNBAUM; J. BORYSOW AND L. FROMMHOLD, P.67, (1985) */
24401/* ============================================ */
24402
24403
24404/* IF IK1K0=1 ONLY B-C; EBC OTHERWISE */
24405
24406 omega = 2. * pi * clight * *fnu;
24407 t0 = hbar / (boltz * 2. * *temp);
24408/* Computing 2nd power */
24409 d__1 = omega * *t1;
24410 z__ = sqrt((d__1 * d__1 + 1.) * (*t2 * *t2 + t0 * t0)) / *t1;
24411 if (z__ - 2. <= 0.) {
24412 goto L10;
24413 } else {
24414 goto L12;
24415 }
24416L10:
24417/* Computing 2nd power */
24418 d__2 = z__ / 3.75;
24419 d__1 = d__2 * d__2;
24420/* Computing 2nd power */
24421 d__4 = z__ / 2.;
24422 d__3 = d__4 * d__4;
24423 xk1 = z__ * z__ * log(z__ / 2.) * ((((((3.2411e-4 * d__1 + .00301532) *
24424 d__1 + .02658733) * d__1 + .15084934) * d__1 + .51498869) * d__1
24425 + .87890594) * d__1 + .5) + ((((((-4.686e-5 * d__3 - .00110404) *
24426 d__3 - .01919402) * d__3 - .18156897) * d__3 - .67278579) * d__3
24427 + .15443144) * d__3 + 1.);
24428 goto L20;
24429L12:
24430 d__1 = 2. / z__;
24431 xk1 = sqrt(z__) * exp(-z__) * ((((((-6.8245e-4 * d__1 + .00325614) * d__1
24432 - .00780353) * d__1 + .01504268) * d__1 - .0365562) * d__1 +
24433 .23498619) * d__1 + 1.25331414);
24434L20:
24435/* Computing 2nd power */
24436 d__1 = *t1 * omega;
24437 bgambc = *t1 / pi * exp(*t2 / *t1 + t0 * omega) * xk1 / (d__1 * d__1 + 1.)
24438 ;
24439 if (ik1k0 == 1) {
24440 goto L55;
24441 }
24442/* Computing 2nd power */
24443 d__1 = omega * *t4;
24444 zp = sqrt((d__1 * d__1 + 1.) * (*t3 * *t3 + t0 * t0)) / *t4;
24445 if (zp - 2. <= 0.) {
24446 goto L22;
24447 } else {
24448 goto L24;
24449 }
24450L22:
24451/* Computing 2nd power */
24452 d__2 = zp / 3.75;
24453 d__1 = d__2 * d__2;
24454/* Computing 2nd power */
24455 d__4 = zp / 2.;
24456 d__3 = d__4 * d__4;
24457 k0 = -log(zp / 2.) * ((((((.0045813 * d__1 + .0360768) * d__1 + .2659732)
24458 * d__1 + 1.2067492) * d__1 + 3.0899424) * d__1 + 3.5156229) *
24459 d__1 + 1.) + ((((((7.4e-6 * d__3 + 1.075e-4) * d__3 + .00262698) *
24460 d__3 + .0348859) * d__3 + .23069756) * d__3 + .4227842) * d__3 -
24461 .57721566);
24462 goto L30;
24463L24:
24464 d__1 = 2. / zp;
24465 k0 = exp(-zp) * ((((((5.3208e-4 * d__1 - .0025154) * d__1 + .00587872) *
24466 d__1 - .01062446) * d__1 + .02189568) * d__1 - .07832358) * d__1
24467 + 1.25331414) / sqrt(zp);
24468L30:
24469 ret_val = (bgambc + *eps * (*t3 / pi) * exp(*t3 / *t4 + t0 * omega) * k0)
24470 / (*eps + 1.);
24471 goto L66;
24472L55:
24473 ret_val = bgambc;
24474L66:
24475 return ret_val;
24476} /* bgama_ */
24477
24478#undef ik1k0
24479
24480
24481/* Subroutine */ int spline_0_(int n__, int *l, int *m, int *k,
24482 double *eps, double *x, double *y, double *t,
24483 double *ss, double *si, int *nr, double *s2)
24484{
24485 /* System generated locals */
24486 int s__1, s__2;
24487 double d__1, d__2;
24488
24489 /* Local variables */
24490 double epsi, prod, h__;
24491 int i__, j, n;
24492 double w, omega;
24493 int n1;
24494 double s3;
24495 int ic;
24496 double sm, delsqs, ht1, ht2, ss2, yp1, eta, ypn;
24497
24498
24499
24500/* SPLINE INTERPOLATION AND QUADRATURE, THIRD ORDER AFTER GREVILLE. */
24501/* INPUT ARGUMENTS L...Y, OUTPUT SS...NR. */
24502/* L DATA POINTS X(1), Y(1) ... X(L),Y(L) */
24503/* EPS=ERROR CRITERION, TYPICALLY EPS=1.D-5 FOR 5 DECI. PLACES ACCURA */
24504/* M ARGUMENTS T(1)..T(M) FOR WHICH FUNCTION VALUES SS(1)..SS(M), FOR */
24505/* K=0; OR FIRST OR SECOND DERIVATIVE FOR K=1 OR -1, RESPECTIVELY. */
24506/* NOTE THAT M HAS TO BE AT LEAST EQUAL TO 1. */
24507/* SI=INTEGRAL (OVER WHOLE INTERVAL) FOR K=2 ONLY. */
24508/* FOR 'NATURAL' SPLINE FUNCTIONS, S2(1)=S2(L)=0. MUST BE INPUT*NOTE* */
24509/* N0 INDICATES THE NUMBER OF OUT-OF-RANGE CALLS. X(1)<T(I)<X(L) */
24510/* EXTRAPOLATE WITH CAUTION. (ASSUMPTION D2Y/DX2 = 0.) */
24511/* S2(I) IS THE 2ND DERIVATIVE AT X=X(I) AND IS COMPUTED INTERNALLY. */
24512/* DIMENSION X(L),Y(L),T(M),SS(M),S2(L) */
24513
24514 /* Parameter adjustments */
24515 --x;
24516 --y;
24517 --t;
24518 --ss;
24519 --s2;
24520
24521 /* Function Body */
24522 switch(n__) {
28
Control jumps to 'case 1:' at line 24523
24523 case 1: goto L_ixpolat;
29
Control jumps to line 24587
24524 }
24525
24526 n = *l;
24527 n1 = n - 1;
24528 *nr = 0;
24529/* L4: */
24530 s__1 = n1;
24531 for (i__ = 2; i__ <= s__1; ++i__) {
24532/* L52: */
24533 s__2 = i__ - 1;
24534 s2[i__] = 3. * ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) - (y[
24535 s__2 + 1] - y[s__2]) / (x[s__2 + 1] - x[s__2])) / (x[i__ + 1]
24536 - x[i__ - 1]) / 1.5;
24537 }
24538 omega = 1.0717968;
24539 ic = 0;
24540/* 'NATURAL' SPLINE FUNCTIONS OF THIRD ORDER. */
24541 s2[1] = 0.;
24542 s2[n] = 0.;
24543L5:
24544 eta = 0.;
24545 ++ic;
24546 sm = abs(s2[1])((s2[1]) >= 0 ? (s2[1]) : -(s2[1]));
24547 s__2 = n;
24548 for (i__ = 2; i__ <= s__2; ++i__) {
24549 if ((d__1 = s2[i__], abs(d__1)((d__1) >= 0 ? (d__1) : -(d__1))) > sm) {
24550 sm = (d__2 = s2[i__], abs(d__2)((d__2) >= 0 ? (d__2) : -(d__2)));
24551 }
24552/* L25: */
24553 }
24554 epsi = *eps * sm;
24555/* L6: */
24556 s__2 = n1;
24557 for (i__ = 2; i__ <= s__2; ++i__) {
24558/* L7: */
24559 s__1 = i__ - 1;
24560 w = (3. * ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) - (y[s__1 +
24561 1] - y[s__1]) / (x[s__1 + 1] - x[s__1])) / (x[i__ + 1] - x[
24562 i__ - 1]) - (x[i__] - x[i__ - 1]) * .5 / (x[i__ + 1] - x[i__
24563 - 1]) * s2[i__ - 1] - (.5 - (x[i__] - x[i__ - 1]) * .5 / (x[
24564 i__ + 1] - x[i__ - 1])) * s2[i__ + 1] - s2[i__]) * omega;
24565/* L8: */
24566 if (abs(w)((w) >= 0 ? (w) : -(w)) - eta <= 0.) {
24567 goto L10;
24568 } else {
24569 goto L9;
24570 }
24571L9:
24572 eta = abs(w)((w) >= 0 ? (w) : -(w));
24573L10:
24574 s2[i__] += w;
24575 }
24576/* L13: */
24577 if (eta - epsi >= 0.) {
24578 goto L5;
24579 } else {
24580 goto L14;
24581 }
24582/* ENTRY IXPOLAT */
24583
24584L_ixpolat:
24585/* THIS ENTRY USEFUL WHEN ITERATION PREVIOUSLY COMPLETED */
24586
24587 n = *l;
24588 n1 = n - 1;
24589 *nr = 0;
24590 ic = -1;
24591L14:
24592 if (*k - 2 != 0) {
30
Assuming the condition is false
31
Taking false branch
24593 goto L15;
24594 } else {
24595 goto L20;
32
Control jumps to line 24708
24596 }
24597L15:
24598 s__2 = *m;
24599 for (j = 1; j <= s__2; ++j) {
24600/* L16: */
24601 i__ = 1;
24602/* L54: */
24603 if ((d__1 = t[j] - x[1]) < 0.) {
24604 goto L58;
24605 } else if (d__1 == 0) {
24606 goto L17;
24607 } else {
24608 goto L55;
24609 }
24610L55:
24611 if ((d__1 = t[j] - x[n]) < 0.) {
24612 goto L57;
24613 } else if (d__1 == 0) {
24614 goto L59;
24615 } else {
24616 goto L158;
24617 }
24618L56:
24619 if ((d__1 = t[j] - x[i__]) < 0.) {
24620 goto L60;
24621 } else if (d__1 == 0) {
24622 goto L17;
24623 } else {
24624 goto L57;
24625 }
24626L57:
24627 ++i__;
24628 goto L56;
24629
24630L58:
24631 ++(*nr);
24632 ht1 = t[j] - x[1];
24633 //ht2 = t[j] - x[2];
24634 yp1 = (y[cs__1 + 1] - y[cs__1]) / (x[cs__1 + 1] - x[cs__1]) + (x[1] -
24635 x[2]) * (s2[1] * 2. + s2[2]) / 6.;
24636 if (*k < 0) {
24637 goto L72;
24638 } else if (*k == 0) {
24639 goto L70;
24640 } else {
24641 goto L71;
24642 }
24643L71:
24644 ss[j] = yp1 + ht1 * s2[1];
24645 goto L61;
24646L70:
24647 ss[j] = y[1] + yp1 * ht1 + s2[1] * ht1 * ht1 / 2.;
24648 goto L61;
24649L72:
24650 ss[j] = s2[i__];
24651 goto L61;
24652L158:
24653 ht2 = t[j] - x[n];
24654 //ht1 = t[j] - x[n1];
24655 ++(*nr);
24656 ypn = (y[n1 + 1] - y[n1]) / (x[n1 + 1] - x[n1]) + (x[n] - x[n1]) * (
24657 s2[n1] + s2[n] * 2.) / 6.;
24658 if (*k < 0) {
24659 goto L82;
24660 } else if (*k == 0) {
24661 goto L80;
24662 } else {
24663 goto L81;
24664 }
24665L81:
24666 ss[j] = ypn + ht2 * s2[n];
24667 goto L61;
24668L80:
24669 ss[j] = y[n] + ypn * ht2 + s2[n] * ht2 * ht2 / 2.;
24670 goto L61;
24671L82:
24672 ss[j] = s2[n];
24673 goto L61;
24674
24675L59:
24676 i__ = n;
24677L60:
24678 --i__;
24679L17:
24680 ht1 = t[j] - x[i__];
24681 ht2 = t[j] - x[i__ + 1];
24682 prod = ht1 * ht2;
24683 s3 = (s2[i__ + 1] - s2[i__]) / (x[i__ + 1] - x[i__]);
24684 ss2 = s2[i__] + ht1 * s3;
24685 delsqs = (s2[i__] + s2[i__ + 1] + ss2) / 6.;
24686
24687 if (*k < 0) {
24688 goto L43;
24689 } else if (*k == 0) {
24690 goto L41;
24691 } else {
24692 goto L42;
24693 }
24694L41:
24695 ss[j] = y[i__] + ht1 * ((y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]))
24696 + prod * delsqs;
24697 goto L61;
24698L42:
24699 ss[j] = (y[i__ + 1] - y[i__]) / (x[i__ + 1] - x[i__]) + (ht1 + ht2) *
24700 delsqs + prod * s3 / 6.;
24701 goto L61;
24702L43:
24703 ss[j] = ss2;
24704L61:
24705 ;
24706 }
24707L20:
24708 *si = 0.;
24709
24710 s__2 = n1;
24711 for (i__ = 1; i__ <= s__2; ++i__) {
33
Assuming 'i__' is > 's__2'
34
Loop condition is false. Execution continues on line 24720
24712 h__ = x[i__ + 1] - x[i__];
24713/* L62: */
24714/* Computing 3rd power */
24715 d__1 = h__;
24716 *si = *si + h__ * .5 * (y[i__] + y[i__ + 1]) - d__1 * (d__1 * d__1) *
24717 (s2[i__] + s2[i__ + 1]) / 24.;
24718 }
24719
24720 if (*k == 2) {
35
Taking true branch
24721 *nr = ic;
24722 }
24723
24724 return 0;
36
Returning without writing to '*ss'
24725} /* spline_ */
24726
24727/* Subroutine */ int spline_(int *l, int *m, int *k,
24728 double *eps, double *x, double *y, double *t,
24729 double *ss, double *si, int *nr, double *s2)
24730{
24731 return spline_0_(0, l, m, k, eps, x, y, t, ss, si, nr, s2);
24732 }
24733
24734/* Subroutine */ int ixpolat_(int *l, int *m, int *k,
24735 double *eps, double *x, double *y, double *t,
24736 double *ss, double *si, int *nr, double *s2)
24737{
24738 return spline_0_(1, l, m, k, eps, x, y, t, ss, si, nr, s2);
27
Calling 'spline_0_'
37
Returning from 'spline_0_'
38
Returning without writing to '*ss'
24739 }
24740
24741
24742// ---------------------- end of Borysow N2N2 F77 code -------------------------
24743
24744
24745// ---------------------- begin of monortm CKD F77 code -------------------------
24746
24747
24748/* Common Block Declarations */
24749
24750struct fh2oa_1_ {
24751 double fh2o[2003];
24752};
24753
24754#define fh2oa_1(*(struct fh2oa_1_ *) &fh2oa_) (*(struct fh2oa_1_ *) &fh2oa_)
24755
24756struct fh2ob_1_ {
24757 double v1, v2, dv;
24758 int nptfh2o;
24759};
24760struct fh2ob_2_ {
24761 double v1, v2, dv;
24762 int npts;
24763};
24764
24765#define fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_) (*(struct fh2ob_1_ *) &fh2ob_)
24766#define fh2ob_2(*(struct fh2ob_2_ *) &fh2ob_) (*(struct fh2ob_2_ *) &fh2ob_)
24767
24768struct sh2oa_1_ {
24769 double swv296[2003];
24770};
24771
24772#define sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_) (*(struct sh2oa_1_ *) &sh2oa_)
24773
24774struct sh2ob_1_ {
24775 double v1, v2, dv;
24776 int nptslfwv;
24777};
24778struct sh2ob_2_ {
24779 double v1, v2, dv;
24780 int npts;
24781};
24782
24783#define sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_) (*(struct sh2ob_1_ *) &sh2ob_)
24784#define sh2ob_2(*(struct sh2ob_2_ *) &sh2ob_) (*(struct sh2ob_2_ *) &sh2ob_)
24785
24786struct s260a_1_ {
24787 double swv260[2003];
24788};
24789
24790#define s260a_1(*(struct s260a_1_ *) &s260a_) (*(struct s260a_1_ *) &s260a_)
24791
24792struct s260b_1_ {
24793 double v1___, v2___, dv___;
24794 int nptslfwv___;
24795};
24796struct s260b_2_ {
24797 double v1, v2, dv;
24798 int npts;
24799};
24800
24801#define s260b_1(*(struct s260b_1_ *) &s260b_) (*(struct s260b_1_ *) &s260b_)
24802#define s260b_2(*(struct s260b_2_ *) &s260b_) (*(struct s260b_2_ *) &s260b_)
24803
24804struct consts_1_ {
24805 double pi, planck, boltz, clight, avogad, alosmt, gascon, radcn1,
24806 radcn2;
24807};
24808
24809#define consts_1(*(struct consts_1_ *) &consts_) (*(struct consts_1_ *) &consts_)
24810
24811/* Initialized data */
24812
24813struct s_fh2oa_ {
24814 double e_1[2003];
24815 } fh2oa_ = { {.012859, .011715, .011038, .011715, .012859, .015326,
24816 .016999, .018321, .019402, .01957, .019432, .017572, .01676,
24817 .01548, .013984, .012266, .010467, .0094526, .0080485, .0069484,
24818 .0061416, .0050941, .0044836, .0038133, .0034608, .0031487,
24819 .0024555, .0020977, .0017266, .001492, .0012709, 9.8081e-4,
24820 8.5063e-4, 6.8822e-4, 5.3809e-4, 4.4679e-4, 3.3774e-4, 2.7979e-4,
24821 2.1047e-4, 1.6511e-4, 1.2993e-4, 9.3033e-5, 7.436e-5, 5.6428e-5,
24822 4.5442e-5, 3.4575e-5, 2.7903e-5, 2.1374e-5, 1.6075e-5, 1.3022e-5,
24823 1.0962e-5, 8.5959e-6, 6.9125e-6, 5.3808e-6, 4.3586e-6, 3.6394e-6,
24824 2.9552e-6, 2.3547e-6, 1.8463e-6, 1.6036e-6, 1.3483e-6, 1.1968e-6,
24825 1.0333e-6, 8.4484e-7, 6.7195e-7, 5.0947e-7, 4.2343e-7, 3.4453e-7,
24826 2.783e-7, 2.3063e-7, 1.9951e-7, 1.7087e-7, 1.4393e-7, 1.2575e-7,
24827 1.075e-7, 8.2325e-8, 5.7524e-8, 4.4482e-8, 3.8106e-8, 3.4315e-8,
24828 2.9422e-8, 2.5069e-8, 2.2402e-8, 1.9349e-8, 1.6152e-8, 1.2208e-8,
24829 8.966e-9, 7.1322e-9, 6.1028e-9, 5.2938e-9, 4.535e-9, 3.4977e-9,
24830 2.9511e-9, 2.4734e-9, 2.0508e-9, 1.8507e-9, 1.6373e-9, 1.5171e-9,
24831 1.3071e-9, 1.2462e-9, 1.2148e-9, 1.259e-9, 1.3153e-9, 1.3301e-9,
24832 1.4483e-9, 1.6944e-9, 2.0559e-9, 2.2954e-9, 2.6221e-9, 3.2606e-9,
24833 4.2392e-9, 5.2171e-9, 6.2553e-9, 8.2548e-9, 9.5842e-9, 1.128e-8,
24834 1.3628e-8, 1.7635e-8, 2.1576e-8, 2.4835e-8, 3.0014e-8, 3.8485e-8,
24835 4.744e-8, 5.5202e-8, 7.0897e-8, 9.6578e-8, 1.3976e-7, 1.8391e-7,
24836 2.3207e-7, 2.996e-7, 4.0408e-7, 5.926e-7, 7.8487e-7, 1.0947e-6,
24837 1.4676e-6, 1.9325e-6, 2.6587e-6, 3.4534e-6, 4.4376e-6, 5.8061e-6,
24838 7.0141e-6, 8.4937e-6, 1.0186e-5, 1.2034e-5, 1.3837e-5, 1.6595e-5,
24839 1.9259e-5, 2.162e-5, 2.3681e-5, 2.7064e-5, 3.251e-5, 3.546e-5,
24840 3.9109e-5, 4.2891e-5, 4.7757e-5, 5.0981e-5, 5.0527e-5, 4.8618e-5,
24841 4.4001e-5, 3.7982e-5, 3.2667e-5, 2.7794e-5, 2.491e-5, 2.4375e-5,
24842 2.7316e-5, 3.2579e-5, 3.5499e-5, 3.801e-5, 4.1353e-5, 4.3323e-5,
24843 4.3004e-5, 3.979e-5, 3.7718e-5, 3.636e-5, 3.2386e-5, 2.7409e-5,
24844 2.3626e-5, 2.0631e-5, 1.8371e-5, 1.5445e-5, 1.2989e-5, 1.1098e-5,
24845 9.6552e-6, 8.0649e-6, 7.2365e-6, 5.9137e-6, 5.2759e-6, 4.886e-6,
24846 4.1321e-6, 3.5918e-6, 2.764e-6, 2.4892e-6, 2.1018e-6, 1.7848e-6,
24847 1.5855e-6, 1.3569e-6, 1.1986e-6, 9.4693e-7, 7.4097e-7, 6.3443e-7,
24848 4.8131e-7, 4.0942e-7, 3.3316e-7, 2.8488e-7, 2.3461e-7, 1.7397e-7,
24849 1.4684e-7, 1.0953e-7, 8.5396e-8, 6.9261e-8, 5.4001e-8, 4.543e-8,
24850 3.2791e-8, 2.5995e-8, 2.0225e-8, 1.571e-8, 1.3027e-8, 1.0229e-8,
24851 8.5277e-9, 6.5249e-9, 5.0117e-9, 3.9906e-9, 3.2332e-9, 2.7847e-9,
24852 2.457e-9, 2.3359e-9, 2.0599e-9, 1.8436e-9, 1.6559e-9, 1.491e-9,
24853 1.2794e-9, 9.8229e-10, 8.0054e-10, 6.0769e-10, 4.5646e-10,
24854 3.3111e-10, 2.4428e-10, 1.8007e-10, 1.3291e-10, 9.7974e-11,
24855 7.8271e-11, 6.3833e-11, 5.4425e-11, 4.6471e-11, 4.0209e-11,
24856 3.5227e-11, 3.1212e-11, 2.884e-11, 2.7762e-11, 2.7935e-11,
24857 3.2012e-11, 3.9525e-11, 5.0303e-11, 6.8027e-11, 9.3954e-11,
24858 1.2986e-10, 1.8478e-10, 2.5331e-10, 3.4827e-10, 4.6968e-10,
24859 6.238e-10, 7.9106e-10, 1.0026e-9, 1.2102e-9, 1.4146e-9, 1.6154e-9,
24860 1.751e-9, 1.8575e-9, 1.8742e-9, 1.87e-9, 1.8582e-9, 1.9657e-9,
24861 2.1204e-9, 2.0381e-9, 2.0122e-9, 2.0436e-9, 2.1213e-9, 2.0742e-9,
24862 1.987e-9, 2.0465e-9, 2.1556e-9, 2.2222e-9, 2.1977e-9, 2.1047e-9,
24863 1.9334e-9, 1.7357e-9, 1.5754e-9, 1.4398e-9, 1.4018e-9, 1.5459e-9,
24864 1.7576e-9, 2.1645e-9, 2.948e-9, 4.4439e-9, 5.8341e-9, 8.0757e-9,
24865 1.1658e-8, 1.6793e-8, 2.2694e-8, 2.9468e-8, 3.9278e-8, 5.2145e-8,
24866 6.4378e-8, 7.7947e-8, 8.5321e-8, 9.7848e-8, 1.0999e-7, 1.1489e-7,
24867 1.2082e-7, 1.2822e-7, 1.4053e-7, 1.5238e-7, 1.5454e-7, 1.5018e-7,
24868 1.4048e-7, 1.2359e-7, 1.0858e-7, 9.3486e-8, 8.1638e-8, 7.769e-8,
24869 8.4625e-8, 1.0114e-7, 1.143e-7, 1.2263e-7, 1.3084e-7, 1.338e-7,
24870 1.3573e-7, 1.3441e-7, 1.2962e-7, 1.2638e-7, 1.1934e-7, 1.1371e-7,
24871 1.0871e-7, 9.8843e-8, 9.1877e-8, 9.105e-8, 9.3213e-8, 9.2929e-8,
24872 1.0155e-7, 1.1263e-7, 1.237e-7, 1.3636e-7, 1.54e-7, 1.7656e-7,
24873 2.1329e-7, 2.3045e-7, 2.5811e-7, 2.9261e-7, 3.4259e-7, 4.077e-7,
24874 4.8771e-7, 5.8081e-7, 7.2895e-7, 8.7482e-7, 1.0795e-6, 1.3384e-6,
24875 1.7208e-6, 2.0677e-6, 2.5294e-6, 3.1123e-6, 3.79e-6, 4.7752e-6,
24876 5.6891e-6, 6.6261e-6, 7.6246e-6, 8.773e-6, 9.6672e-6, 1.098e-5,
24877 1.1287e-5, 1.167e-5, 1.1635e-5, 1.1768e-5, 1.2039e-5, 1.2253e-5,
24878 1.3294e-5, 1.4005e-5, 1.3854e-5, 1.342e-5, 1.3003e-5, 1.2645e-5,
24879 1.1715e-5, 1.1258e-5, 1.1516e-5, 1.2494e-5, 1.3655e-5, 1.4931e-5,
24880 1.4649e-5, 1.3857e-5, 1.312e-5, 1.1791e-5, 1.0637e-5, 8.276e-6,
24881 6.5821e-6, 5.1959e-6, 4.0158e-6, 3.0131e-6, 2.0462e-6, 1.4853e-6,
24882 1.0365e-6, 7.3938e-7, 4.9752e-7, 3.4148e-7, 2.4992e-7, 1.8363e-7,
24883 1.4591e-7, 1.138e-7, 9.0588e-8, 7.3697e-8, 6.0252e-8, 5.1868e-8,
24884 4.266e-8, 3.6163e-8, 3.2512e-8, 2.9258e-8, 2.4238e-8, 2.1209e-8,
24885 1.6362e-8, 1.3871e-8, 1.2355e-8, 9.694e-9, 7.7735e-9, 6.2278e-9,
24886 5.2282e-9, 4.3799e-9, 3.5545e-9, 2.7527e-9, 2.095e-9, 1.6344e-9,
24887 1.2689e-9, 1.0403e-9, 8.488e-10, 6.3461e-10, 4.7657e-10,
24888 3.522e-10, 2.7879e-10, 2.3021e-10, 1.6167e-10, 1.1732e-10,
24889 8.9206e-11, 7.0596e-11, 5.831e-11, 4.4084e-11, 3.1534e-11,
24890 2.5068e-11, 2.2088e-11, 2.2579e-11, 2.2637e-11, 2.5705e-11,
24891 3.2415e-11, 4.6116e-11, 6.5346e-11, 9.4842e-11, 1.2809e-10,
24892 1.8211e-10, 2.4052e-10, 3.027e-10, 3.5531e-10, 4.2402e-10,
24893 4.673e-10, 4.7942e-10, 4.6813e-10, 4.5997e-10, 4.5788e-10,
24894 4.0311e-10, 3.7367e-10, 3.3149e-10, 2.9281e-10, 2.5231e-10,
24895 2.1152e-10, 1.9799e-10, 1.8636e-10, 1.9085e-10, 2.0786e-10,
24896 2.2464e-10, 2.3785e-10, 2.5684e-10, 2.7499e-10, 2.6962e-10,
24897 2.6378e-10, 2.6297e-10, 2.6903e-10, 2.7035e-10, 2.5394e-10,
24898 2.5655e-10, 2.7184e-10, 2.9013e-10, 3.0585e-10, 3.0791e-10,
24899 3.1667e-10, 3.4343e-10, 3.7365e-10, 4.0269e-10, 4.726e-10,
24900 5.6584e-10, 6.9791e-10, 8.6569e-10, 1.0393e-9, 1.2067e-9,
24901 1.5047e-9, 1.8583e-9, 2.2357e-9, 2.6498e-9, 3.2483e-9, 3.9927e-9,
24902 4.6618e-9, 5.5555e-9, 6.6609e-9, 8.2139e-9, 1.0285e-8, 1.3919e-8,
24903 1.8786e-8, 2.515e-8, 3.313e-8, 4.5442e-8, 6.337e-8, 9.0628e-8,
24904 1.2118e-7, 1.5927e-7, 2.1358e-7, 2.7825e-7, 3.7671e-7, 4.4894e-7,
24905 5.4442e-7, 6.224e-7, 7.3004e-7, 8.3384e-7, 8.7933e-7, 8.808e-7,
24906 8.6939e-7, 8.6541e-7, 8.2055e-7, 7.7278e-7, 7.5989e-7, 8.6909e-7,
24907 9.7945e-7, 1.0394e-6, 1.0646e-6, 1.1509e-6, 1.2017e-6, 1.1915e-6,
24908 1.1259e-6, 1.1549e-6, 1.1938e-6, 1.2356e-6, 1.2404e-6, 1.1716e-6,
24909 1.1149e-6, 1.0073e-6, 8.9845e-7, 7.6639e-7, 6.1517e-7, 5.0887e-7,
24910 4.1269e-7, 3.2474e-7, 2.5698e-7, 1.8893e-7, 1.4009e-7, 1.034e-7,
24911 7.7724e-8, 5.7302e-8, 4.2178e-8, 2.9603e-8, 2.1945e-8, 1.6301e-8,
24912 1.2806e-8, 1.0048e-8, 7.897e-9, 6.1133e-9, 4.9054e-9, 4.1985e-9,
24913 3.6944e-9, 3.2586e-9, 2.7362e-9, 2.3647e-9, 2.1249e-9, 1.8172e-9,
24914 1.6224e-9, 1.5158e-9, 1.2361e-9, 1.0682e-9, 9.2312e-10, 7.922e-10,
24915 6.8174e-10, 5.6147e-10, 4.8268e-10, 4.1534e-10, 3.3106e-10,
24916 2.8275e-10, 2.4584e-10, 2.0742e-10, 1.784e-10, 1.4664e-10,
24917 1.239e-10, 1.0497e-10, 8.5038e-11, 6.7008e-11, 5.6355e-11,
24918 4.3323e-11, 3.6914e-11, 3.2262e-11, 3.0749e-11, 3.0318e-11,
24919 2.9447e-11, 2.9918e-11, 3.0668e-11, 3.1315e-11, 3.0329e-11,
24920 2.8259e-11, 2.6065e-11, 2.3578e-11, 2.0469e-11, 1.6908e-11,
24921 1.4912e-11, 1.1867e-11, 9.973e-12, 8.1014e-12, 6.7528e-12,
24922 6.3133e-12, 5.8599e-12, 6.0145e-12, 6.5105e-12, 7.0537e-12,
24923 7.4973e-12, 7.8519e-12, 8.5039e-12, 9.1995e-12, 1.0694e-11,
24924 1.1659e-11, 1.2685e-11, 1.3087e-11, 1.3222e-11, 1.2634e-11,
24925 1.1077e-11, 9.6259e-12, 8.3202e-12, 7.4857e-12, 6.8069e-12,
24926 6.7496e-12, 7.3116e-12, 8.0171e-12, 8.6394e-12, 9.2659e-12,
24927 1.0048e-11, 1.0941e-11, 1.2226e-11, 1.3058e-11, 1.5193e-11,
24928 1.8923e-11, 2.3334e-11, 2.8787e-11, 3.6693e-11, 4.8295e-11,
24929 6.426e-11, 8.8269e-11, 1.1865e-10, 1.5961e-10, 2.0605e-10,
24930 2.7349e-10, 3.7193e-10, 4.8216e-10, 6.1966e-10, 7.715e-10,
24931 1.0195e-9, 1.2859e-9, 1.6535e-9, 2.0316e-9, 2.3913e-9, 3.0114e-9,
24932 3.7495e-9, 4.6504e-9, 5.9145e-9, 7.684e-9, 1.0304e-8, 1.301e-8,
24933 1.6441e-8, 2.1475e-8, 2.5892e-8, 2.9788e-8, 3.382e-8, 4.0007e-8,
24934 4.4888e-8, 4.5765e-8, 4.6131e-8, 4.6239e-8, 4.4849e-8, 4.0729e-8,
24935 3.6856e-8, 3.6164e-8, 3.7606e-8, 4.1457e-8, 4.375e-8, 5.115e-8,
24936 5.6054e-8, 6.1586e-8, 6.4521e-8, 6.6494e-8, 6.9024e-8, 6.8893e-8,
24937 7.0901e-8, 6.976e-8, 7.1485e-8, 7.074e-8, 7.3764e-8, 7.6618e-8,
24938 8.4182e-8, 9.3838e-8, 1.0761e-7, 1.2851e-7, 1.4748e-7, 1.8407e-7,
24939 2.2109e-7, 2.6392e-7, 2.9887e-7, 3.4493e-7, 4.0336e-7, 4.3551e-7,
24940 4.9231e-7, 5.0728e-7, 5.3781e-7, 5.3285e-7, 5.4496e-7, 5.5707e-7,
24941 5.6944e-7, 6.1123e-7, 6.4317e-7, 6.4581e-7, 6.1999e-7, 6.0191e-7,
24942 5.7762e-7, 5.7241e-7, 5.7013e-7, 6.016e-7, 6.6905e-7, 7.4095e-7,
24943 8.2121e-7, 8.0947e-7, 7.6145e-7, 7.2193e-7, 6.3722e-7, 5.4316e-7,
24944 4.2186e-7, 3.2528e-7, 2.5207e-7, 1.8213e-7, 1.2658e-7, 8.6746e-8,
24945 6.0216e-8, 4.1122e-8, 2.8899e-8, 2.174e-8, 1.799e-8, 1.5593e-8,
24946 1.397e-8, 1.2238e-8, 1.0539e-8, 9.2386e-9, 7.8481e-9, 6.8704e-9,
24947 5.7615e-9, 5.0434e-9, 4.6886e-9, 4.377e-9, 3.9768e-9, 3.5202e-9,
24948 3.1854e-9, 2.9009e-9, 2.5763e-9, 2.2135e-9, 1.9455e-9, 1.6248e-9,
24949 1.3368e-9, 1.0842e-9, 8.4254e-10, 6.7414e-10, 5.4667e-10,
24950 4.5005e-10, 3.4932e-10, 2.6745e-10, 2.2053e-10, 1.8162e-10,
24951 1.4935e-10, 1.1618e-10, 9.1888e-11, 8.0672e-11, 6.8746e-11,
24952 6.2668e-11, 5.5715e-11, 4.5074e-11, 3.7669e-11, 3.2082e-11,
24953 2.8085e-11, 2.4838e-11, 1.9791e-11, 1.6964e-11, 1.3887e-11,
24954 1.1179e-11, 9.7499e-12, 7.8255e-12, 6.3698e-12, 5.3265e-12,
24955 4.6588e-12, 4.4498e-12, 3.9984e-12, 3.7513e-12, 3.7176e-12,
24956 3.9148e-12, 4.2702e-12, 5.009e-12, 6.5801e-12, 8.7787e-12,
24957 1.2718e-11, 1.8375e-11, 2.5304e-11, 3.5403e-11, 4.8842e-11,
24958 6.484e-11, 8.0911e-11, 1.0136e-10, 1.2311e-10, 1.4203e-10,
24959 1.5869e-10, 1.8093e-10, 2.137e-10, 2.5228e-10, 2.8816e-10,
24960 3.4556e-10, 3.986e-10, 4.435e-10, 4.776e-10, 5.2357e-10,
24961 6.0827e-10, 6.3635e-10, 6.5886e-10, 6.8753e-10, 7.2349e-10,
24962 7.2789e-10, 6.8232e-10, 6.6081e-10, 6.4232e-10, 6.3485e-10,
24963 6.4311e-10, 7.2235e-10, 7.7263e-10, 8.1668e-10, 9.0324e-10,
24964 9.7643e-10, 1.0535e-9, 1.0195e-9, 1.0194e-9, 1.0156e-9,
24965 9.6792e-10, 9.2725e-10, 8.7347e-10, 8.4484e-10, 8.2647e-10,
24966 8.4363e-10, 9.1261e-10, 1.0051e-9, 1.1511e-9, 1.4037e-9,
24967 1.8066e-9, 2.4483e-9, 3.2739e-9, 4.3194e-9, 5.6902e-9, 7.7924e-9,
24968 9.7376e-9, 1.2055e-8, 1.4303e-8, 1.6956e-8, 1.9542e-8, 2.2233e-8,
24969 2.5186e-8, 2.7777e-8, 2.8943e-8, 2.8873e-8, 2.9417e-8, 2.7954e-8,
24970 2.7524e-8, 2.704e-8, 3.1254e-8, 3.6843e-8, 3.7797e-8, 3.8713e-8,
24971 4.0135e-8, 4.2824e-8, 4.3004e-8, 4.0279e-8, 4.2781e-8, 4.522e-8,
24972 4.8948e-8, 5.0172e-8, 4.8499e-8, 4.7182e-8, 4.2204e-8, 3.7701e-8,
24973 3.0972e-8, 2.4654e-8, 1.9543e-8, 1.4609e-8, 1.1171e-8, 8.3367e-9,
24974 6.3791e-9, 5.079e-9, 4.0655e-9, 3.3658e-9, 2.7882e-9, 2.4749e-9,
24975 2.2287e-9, 2.0217e-9, 1.8191e-9, 1.5897e-9, 1.4191e-9, 1.2448e-9,
24976 1.0884e-9, 9.3585e-10, 7.9429e-10, 7.3214e-10, 6.5008e-10,
24977 5.7549e-10, 5.43e-10, 4.7251e-10, 4.3451e-10, 3.8446e-10,
24978 3.5589e-10, 3.4432e-10, 2.8209e-10, 2.462e-10, 2.1278e-10,
24979 1.8406e-10, 1.6314e-10, 1.3261e-10, 1.1696e-10, 9.6865e-11,
24980 7.6814e-11, 6.6411e-11, 5.0903e-11, 4.0827e-11, 3.0476e-11,
24981 2.323e-11, 1.7707e-11, 1.3548e-11, 1.0719e-11, 9.3026e-12,
24982 8.7967e-12, 8.3136e-12, 7.3918e-12, 6.5293e-12, 5.9243e-12,
24983 5.3595e-12, 3.5266e-12, 2.2571e-12, 1.615e-12, 1.1413e-12,
24984 8.4998e-13, 7.0803e-13, 5.1747e-13, 4.0694e-13, 3.6528e-13,
24985 3.367e-13, 3.1341e-13, 2.939e-13, 2.868e-13, 3.1283e-13,
24986 3.7294e-13, 5.0194e-13, 6.7919e-13, 1.0455e-12, 1.523e-12,
24987 2.3932e-12, 3.4231e-12, 5.0515e-12, 7.3193e-12, 9.9406e-12,
24988 1.2193e-11, 1.4742e-11, 1.9269e-11, 2.1816e-11, 2.275e-11,
24989 2.2902e-11, 2.3888e-11, 2.4902e-11, 2.216e-11, 2.0381e-11,
24990 1.9903e-11, 2.0086e-11, 1.9304e-11, 2.0023e-11, 2.2244e-11,
24991 2.545e-11, 3.1228e-11, 3.456e-11, 3.6923e-11, 3.7486e-11,
24992 3.8124e-11, 3.8317e-11, 3.4737e-11, 3.3037e-11, 3.1724e-11,
24993 2.984e-11, 2.8301e-11, 2.5857e-11, 2.3708e-11, 1.9452e-11,
24994 1.6232e-11, 1.5174e-11, 1.4206e-11, 1.4408e-11, 1.5483e-11,
24995 1.8642e-11, 2.3664e-11, 3.0181e-11, 4.016e-11, 5.2287e-11,
24996 7.2754e-11, 1.0511e-10, 1.4531e-10, 2.0998e-10, 2.6883e-10,
24997 3.3082e-10, 4.2638e-10, 5.3132e-10, 6.3617e-10, 7.1413e-10,
24998 8.5953e-10, 9.9715e-10, 1.0796e-9, 1.0978e-9, 1.1052e-9,
24999 1.1095e-9, 1.0641e-9, 9.7881e-10, 9.659e-10, 1.0332e-9, 1.1974e-9,
25000 1.3612e-9, 1.5829e-9, 1.8655e-9, 2.1465e-9, 2.4779e-9, 2.737e-9,
25001 2.9915e-9, 3.3037e-9, 3.6347e-9, 3.9587e-9, 4.4701e-9, 5.0122e-9,
25002 5.8044e-9, 6.1916e-9, 6.9613e-9, 7.7863e-9, 8.282e-9, 9.4359e-9,
25003 9.7387e-9, 1.0656e-8, 1.0746e-8, 1.121e-8, 1.1905e-8, 1.2194e-8,
25004 1.3145e-8, 1.3738e-8, 1.3634e-8, 1.3011e-8, 1.2511e-8, 1.1805e-8,
25005 1.2159e-8, 1.239e-8, 1.3625e-8, 1.5678e-8, 1.7886e-8, 1.9933e-8,
25006 1.9865e-8, 1.9e-8, 1.7812e-8, 1.5521e-8, 1.2593e-8, 9.5635e-9,
25007 7.2987e-9, 5.2489e-9, 3.5673e-9, 2.4206e-9, 1.6977e-9, 1.2456e-9,
25008 9.3744e-10, 7.8379e-10, 6.996e-10, 6.6451e-10, 6.8521e-10,
25009 7.4234e-10, 8.6658e-10, 9.4972e-10, 1.0791e-9, 1.2359e-9,
25010 1.3363e-9, 1.5025e-9, 1.5368e-9, 1.6152e-9, 1.6184e-9, 1.6557e-9,
25011 1.7035e-9, 1.6916e-9, 1.7237e-9, 1.7175e-9, 1.6475e-9, 1.5335e-9,
25012 1.4272e-9, 1.3282e-9, 1.3459e-9, 1.4028e-9, 1.5192e-9, 1.7068e-9,
25013 1.9085e-9, 2.1318e-9, 2.102e-9, 1.9942e-9, 1.8654e-9, 1.6391e-9,
25014 1.3552e-9, 1.0186e-9, 7.854e-10, 5.7022e-10, 3.9247e-10,
25015 2.5441e-10, 1.6699e-10, 1.1132e-10, 6.8989e-11, 4.5255e-11,
25016 3.1106e-11, 2.3161e-11, 1.7618e-11, 1.438e-11, 1.1601e-11,
25017 9.7148e-12, 8.4519e-12, 6.5392e-12, 5.4113e-12, 4.7624e-12,
25018 4.0617e-12, 3.6173e-12, 2.8608e-12, 2.2724e-12, 1.7436e-12,
25019 1.3424e-12, 1.0358e-12, 7.3064e-13, 5.45e-13, 4.0551e-13,
25020 2.8642e-13, 2.1831e-13, 1.686e-13, 1.2086e-13, 1.015e-13,
25021 9.355e-14, 8.4105e-14, 7.3051e-14, 6.9796e-14, 7.9949e-14,
25022 1.0742e-13, 1.5639e-13, 2.1308e-13, 3.1226e-13, 4.6853e-13,
25023 6.6917e-13, 1.0088e-12, 1.4824e-12, 2.2763e-12, 3.3917e-12,
25024 4.4585e-12, 6.3187e-12, 8.4189e-12, 1.1302e-11, 1.3431e-11,
25025 1.5679e-11, 1.9044e-11, 2.2463e-11, 2.3605e-11, 2.3619e-11,
25026 2.3505e-11, 2.3805e-11, 2.2549e-11, 1.9304e-11, 1.8382e-11,
25027 1.7795e-11, 1.8439e-11, 1.9146e-11, 2.1966e-11, 2.6109e-11,
25028 3.1883e-11, 3.7872e-11, 4.3966e-11, 4.8789e-11, 5.3264e-11,
25029 5.9705e-11, 6.3744e-11, 7.0163e-11, 7.9114e-11, 8.8287e-11,
25030 9.9726e-11, 1.1498e-10, 1.37e-10, 1.6145e-10, 1.9913e-10,
25031 2.2778e-10, 2.6216e-10, 2.977e-10, 3.3405e-10, 3.7821e-10,
25032 3.9552e-10, 4.1322e-10, 4.0293e-10, 4.0259e-10, 3.8853e-10,
25033 3.7842e-10, 3.8551e-10, 4.4618e-10, 5.0527e-10, 5.0695e-10,
25034 5.1216e-10, 5.193e-10, 5.5794e-10, 5.332e-10, 5.2008e-10,
25035 5.6888e-10, 6.1883e-10, 6.9006e-10, 6.9505e-10, 6.6768e-10,
25036 6.329e-10, 5.6753e-10, 5.0327e-10, 3.983e-10, 3.1147e-10,
25037 2.4416e-10, 1.886e-10, 1.3908e-10, 9.9156e-11, 7.3779e-11,
25038 5.6048e-11, 4.2457e-11, 3.4505e-11, 2.9881e-11, 2.7865e-11,
25039 2.8471e-11, 3.1065e-11, 3.4204e-11, 3.914e-11, 4.3606e-11,
25040 4.9075e-11, 5.3069e-11, 5.5236e-11, 5.5309e-11, 5.3832e-11,
25041 5.3183e-11, 5.1783e-11, 5.2042e-11, 5.4422e-11, 5.5656e-11,
25042 5.4409e-11, 5.2659e-11, 5.1696e-11, 5.1726e-11, 4.9003e-11,
25043 4.905e-11, 5.17e-11, 5.6818e-11, 6.3129e-11, 6.6542e-11,
25044 6.4367e-11, 5.9908e-11, 5.447e-11, 4.7903e-11, 3.9669e-11,
25045 2.9651e-11, 2.2286e-11, 1.6742e-11, 1.1827e-11, 7.7739e-12,
25046 4.8805e-12, 3.1747e-12, 2.0057e-12, 1.255e-12, 8.7434e-13,
25047 6.2755e-13, 4.9752e-13, 4.0047e-13, 3.5602e-13, 3.093e-13,
25048 2.4903e-13, 1.9316e-13, 1.4995e-13, 1.2059e-13, 8.7242e-14,
25049 6.4511e-14, 5.33e-14, 4.3741e-14, 3.4916e-14, 2.656e-14,
25050 1.6923e-14, 1.1816e-14, 6.7071e-15, 3.6474e-15, 2.0686e-15,
25051 1.1925e-15, 6.8948e-16, 3.9661e-16, 2.2576e-16, 1.2669e-16,
25052 6.9908e-17, 3.7896e-17, 2.028e-17, 1.1016e-17, 6.7816e-18,
25053 6.0958e-18, 8.9913e-18, 1.7201e-17, 3.4964e-17, 7.0722e-17,
25054 1.402e-16, 2.7167e-16, 5.1478e-16, 9.55e-16, 1.7376e-15,
25055 3.1074e-15, 5.4789e-15, 9.564e-15, 1.6635e-14, 2.9145e-14,
25056 5.2179e-14, 8.8554e-14, 1.4764e-13, 2.3331e-13, 3.5996e-13,
25057 5.2132e-13, 6.3519e-13, 7.3174e-13, 8.3752e-13, 9.8916e-13,
25058 1.1515e-12, 1.4034e-12, 1.6594e-12, 2.1021e-12, 2.7416e-12,
25059 3.4135e-12, 4.5517e-12, 5.5832e-12, 7.2303e-12, 9.9484e-12,
25060 1.2724e-11, 1.6478e-11, 2.0588e-11, 2.5543e-11, 3.3625e-11,
25061 4.1788e-11, 5.0081e-11, 6.0144e-11, 6.9599e-11, 8.4408e-11,
25062 9.7143e-11, 1.0805e-10, 1.1713e-10, 1.2711e-10, 1.3727e-10,
25063 1.4539e-10, 1.6049e-10, 1.768e-10, 2.0557e-10, 2.4967e-10,
25064 3.0096e-10, 3.5816e-10, 4.0851e-10, 4.6111e-10, 5.2197e-10,
25065 5.5043e-10, 6.0324e-10, 6.4983e-10, 6.7498e-10, 7.0545e-10,
25066 7.068e-10, 7.5218e-10, 7.5723e-10, 7.784e-10, 8.0081e-10,
25067 8.0223e-10, 7.7271e-10, 7.1676e-10, 6.7819e-10, 6.4753e-10,
25068 6.5844e-10, 7.0163e-10, 7.7503e-10, 8.8152e-10, 9.9022e-10,
25069 1.0229e-9, 9.9296e-10, 8.9911e-10, 7.7813e-10, 6.3785e-10,
25070 4.7491e-10, 3.528e-10, 2.4349e-10, 1.6502e-10, 1.1622e-10,
25071 8.6715e-11, 6.736e-11, 5.391e-11, 4.5554e-11, 4.13e-11,
25072 3.9728e-11, 3.9e-11, 3.9803e-11, 4.1514e-11, 4.3374e-11,
25073 4.6831e-11, 4.8921e-11, 5.1995e-11, 5.7242e-11, 6.2759e-11,
25074 7.0801e-11, 7.4555e-11, 7.9754e-11, 8.7616e-11, 9.1171e-11,
25075 1.0349e-10, 1.1047e-10, 1.2024e-10, 1.299e-10, 1.3725e-10,
25076 1.5005e-10, 1.5268e-10, 1.5535e-10, 1.5623e-10, 1.5009e-10,
25077 1.4034e-10, 1.3002e-10, 1.2225e-10, 1.1989e-10, 1.2411e-10,
25078 1.3612e-10, 1.5225e-10, 1.7202e-10, 1.9471e-10, 1.9931e-10,
25079 1.9079e-10, 1.7478e-10, 1.5259e-10, 1.2625e-10, 9.3332e-11,
25080 6.8796e-11, 4.6466e-11, 2.9723e-11, 1.8508e-11, 1.2106e-11,
25081 8.0142e-12, 5.4066e-12, 3.9329e-12, 3.1665e-12, 2.742e-12,
25082 2.3996e-12, 2.3804e-12, 2.3242e-12, 2.4476e-12, 2.5331e-12,
25083 2.3595e-12, 2.2575e-12, 2.1298e-12, 2.0088e-12, 1.8263e-12,
25084 1.6114e-12, 1.4422e-12, 1.2946e-12, 1.0837e-12, 9.1282e-13,
25085 7.2359e-13, 5.3307e-13, 3.8837e-13, 2.6678e-13, 1.6769e-13,
25086 1.0826e-13, 7.2364e-14, 4.5201e-14, 3.0808e-14, 2.2377e-14,
25087 1.704e-14, 9.2181e-15, 5.2934e-15, 3.5774e-15, 3.1431e-15,
25088 3.7647e-15, 5.6428e-15, 9.5139e-15, 1.7322e-14, 2.8829e-14,
25089 4.7708e-14, 6.9789e-14, 9.7267e-14, 1.4662e-13, 1.9429e-13,
25090 2.5998e-13, 3.6636e-13, 4.796e-13, 6.5129e-13, 7.7638e-13,
25091 9.3774e-13, 1.1467e-12, 1.3547e-12, 1.5686e-12, 1.6893e-12,
25092 1.9069e-12, 2.1352e-12, 2.3071e-12, 2.4759e-12, 2.8247e-12,
25093 3.4365e-12, 4.3181e-12, 5.6107e-12, 7.0017e-12, 8.6408e-12,
25094 1.0974e-11, 1.3742e-11, 1.6337e-11, 2.0157e-11, 2.3441e-11,
25095 2.6733e-11, 3.0247e-11, 3.3737e-11, 3.8618e-11, 4.1343e-11,
25096 4.387e-11, 4.4685e-11, 4.4881e-11, 4.5526e-11, 4.3628e-11,
25097 4.4268e-11, 4.6865e-11, 5.3426e-11, 5.402e-11, 5.3218e-11,
25098 5.4587e-11, 5.636e-11, 5.774e-11, 5.6426e-11, 6.0399e-11,
25099 6.6981e-11, 7.4319e-11, 7.7977e-11, 7.5539e-11, 7.161e-11,
25100 6.4606e-11, 5.5498e-11, 4.3944e-11, 3.3769e-11, 2.5771e-11,
25101 1.9162e-11, 1.3698e-11, 1.0173e-11, 7.8925e-12, 6.1938e-12,
25102 4.7962e-12, 4.0811e-12, 3.3912e-12, 2.8625e-12, 2.4504e-12,
25103 2.2188e-12, 2.2139e-12, 2.2499e-12, 2.2766e-12, 2.3985e-12,
25104 2.5459e-12, 2.9295e-12, 3.4196e-12, 3.6155e-12, 4.0733e-12,
25105 4.461e-12, 4.9372e-12, 5.4372e-12, 5.7304e-12, 6.164e-12,
25106 6.1278e-12, 6.294e-12, 6.4947e-12, 6.8174e-12, 7.519e-12,
25107 8.2608e-12, 8.4971e-12, 8.3484e-12, 8.1888e-12, 7.8552e-12,
25108 7.8468e-12, 7.5943e-12, 7.9096e-12, 8.6869e-12, 9.1303e-12,
25109 9.2547e-12, 8.9322e-12, 8.2177e-12, 7.3408e-12, 5.7956e-12,
25110 4.447e-12, 3.5881e-12, 2.6748e-12, 1.7074e-12, 9.67e-13,
25111 5.2645e-13, 2.9943e-13, 1.7316e-13, 1.0039e-13, 5.7859e-14,
25112 3.2968e-14, 1.8499e-14, 1.0192e-14, 5.5015e-15, 2.904e-15,
25113 1.4968e-15, 7.5244e-16, 3.6852e-16, 1.7568e-16, 8.1464e-17,
25114 3.6717e-17, 1.6076e-17, 6.8341e-18, 2.8195e-18, 1.1286e-18, 0.,
25115 0., 0., 0., 0., 0., 0., 0., 0., 1.407e-18, 3.0405e-18, 6.4059e-18,
25116 1.3169e-17, 2.6443e-17, 5.1917e-17, 9.9785e-17, 1.8802e-16,
25117 3.4788e-16, 6.3328e-16, 1.137e-15, 2.0198e-15, 3.5665e-15,
25118 6.3053e-15, 1.1309e-14, 2.1206e-14, 3.2858e-14, 5.5165e-14,
25119 8.6231e-14, 1.2776e-13, 1.778e-13, 2.5266e-13, 3.6254e-13,
25120 5.1398e-13, 6.8289e-13, 8.7481e-13, 1.1914e-12, 1.6086e-12,
25121 2.0469e-12, 2.5761e-12, 3.4964e-12, 4.498e-12, 5.5356e-12,
25122 6.7963e-12, 8.572e-12, 1.07e-11, 1.2983e-11, 1.627e-11,
25123 1.9609e-11, 2.2668e-11, 2.5963e-11, 3.0918e-11, 3.493e-11,
25124 3.933e-11, 4.4208e-11, 4.6431e-11, 5.1141e-11, 5.4108e-11,
25125 5.8077e-11, 6.505e-11, 7.2126e-11, 8.1064e-11, 8.1973e-11,
25126 8.1694e-11, 8.3081e-11, 8.024e-11, 7.9225e-11, 7.6256e-11,
25127 7.8468e-11, 8.0041e-11, 8.1585e-11, 8.3485e-11, 8.3774e-11,
25128 8.587e-11, 8.6104e-11, 8.8516e-11, 9.0814e-11, 9.2522e-11,
25129 8.8913e-11, 7.8381e-11, 6.8568e-11, 5.6797e-11, 4.4163e-11,
25130 3.2369e-11, 2.3259e-11, 1.6835e-11, 1.1733e-11, 8.5273e-12,
25131 6.3805e-12, 4.8983e-12, 3.8831e-12, 3.261e-12, 2.8577e-12,
25132 2.521e-12, 2.2913e-12, 2.0341e-12, 1.8167e-12, 1.6395e-12,
25133 1.489e-12, 1.3516e-12, 1.2542e-12, 1.291e-12, 1.3471e-12,
25134 1.4689e-12, 1.5889e-12, 1.6989e-12, 1.8843e-12, 2.0902e-12,
25135 2.3874e-12, 2.7294e-12, 3.3353e-12, 4.0186e-12, 4.5868e-12,
25136 5.2212e-12, 5.8856e-12, 6.5991e-12, 7.2505e-12, 7.6637e-12,
25137 8.5113e-12, 9.4832e-12, 9.9678e-12, 1.0723e-11, 1.0749e-11,
25138 1.138e-11, 1.1774e-11, 1.1743e-11, 1.2493e-11, 1.2559e-11,
25139 1.2332e-11, 1.1782e-11, 1.1086e-11, 1.0945e-11, 1.1178e-11,
25140 1.2083e-11, 1.3037e-11, 1.473e-11, 1.645e-11, 1.7403e-11,
25141 1.7004e-11, 1.5117e-11, 1.3339e-11, 1.0844e-11, 8.0915e-12,
25142 5.6615e-12, 3.7196e-12, 2.5194e-12, 1.6569e-12, 1.1201e-12,
25143 8.2335e-13, 6.027e-13, 4.8205e-13, 4.1313e-13, 3.6243e-13,
25144 3.2575e-13, 2.773e-13, 2.5292e-13, 2.3062e-13, 2.1126e-13,
25145 2.1556e-13, 2.1213e-13, 2.2103e-13, 2.1927e-13, 2.0794e-13,
25146 1.9533e-13, 1.6592e-13, 1.4521e-13, 1.1393e-13, 8.3772e-14,
25147 6.2077e-14, 4.3337e-14, 2.7165e-14, 1.6821e-14, 9.5407e-15,
25148 5.3093e-15, 3.032e-15, 1.7429e-15, 9.9828e-16, 5.6622e-16,
25149 3.1672e-16, 1.7419e-16, 9.3985e-17, 4.9656e-17, 2.5652e-17,
25150 1.2942e-17, 6.3695e-18, 3.0554e-18, 1.4273e-18, -0., -0., -0.,
25151 -0., -0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25152 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25153 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25154 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25155 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25156 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25157 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25158 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25159 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25160 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25161 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
25162 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.} };
25163
25164struct s_fh2ob_ {
25165 double e_1[3];
25166 int e_2;
25167 } fh2ob_ = { {-20., 2e4, 10.}, 2003 };
25168
25169struct s_sh2oa_ {
25170 double e_1[2003];
25171 } sh2oa_ = { {.11109, .10573, .10162, .10573, .11109, .12574, .13499,
25172 .14327, .15065, .15164, .15022, .13677, .13115, .12253, .11271,
25173 .1007, .087495, .080118, .06994, .062034, .056051, .047663,
25174 .04245, .03669, .033441, .030711, .025205, .022113, .01888,
25175 .016653, .014626, .012065, .010709, .0091783, .0077274, .0067302,
25176 .0056164, .0049089, .0041497, .0035823, .0031124, .0026414,
25177 .0023167, .0020156, .0017829, .0015666, .0013928, .0012338,
25178 .0010932, 9.7939e-4, 8.8241e-4, 7.9173e-4, 7.1296e-4, 6.4179e-4,
25179 5.8031e-4, 5.2647e-4, 4.7762e-4, 4.3349e-4, 3.9355e-4, 3.5887e-4,
25180 3.2723e-4, 2.9919e-4, 2.7363e-4, 2.5013e-4, 2.2876e-4, 2.0924e-4,
25181 1.9193e-4, 1.7618e-4, 1.6188e-4, 1.4891e-4, 1.3717e-4, 1.2647e-4,
25182 1.1671e-4, 1.0786e-4, 9.9785e-5, 9.235e-5, 8.5539e-5, 7.9377e-5,
25183 7.3781e-5, 6.8677e-5, 6.3993e-5, 5.9705e-5, 5.5788e-5, 5.2196e-5,
25184 4.8899e-5, 4.5865e-5, 4.3079e-5, 4.0526e-5, 3.8182e-5, 3.6025e-5,
25185 3.4038e-5, 3.2203e-5, 3.0511e-5, 2.8949e-5, 2.7505e-5, 2.617e-5,
25186 2.4933e-5, 2.3786e-5, 2.2722e-5, 2.1736e-5, 2.0819e-5, 1.9968e-5,
25187 1.9178e-5, 1.8442e-5, 1.776e-5, 1.7127e-5, 1.6541e-5, 1.5997e-5,
25188 1.5495e-5, 1.5034e-5, 1.4614e-5, 1.423e-5, 1.3883e-5, 1.3578e-5,
25189 1.3304e-5, 1.3069e-5, 1.2876e-5, 1.2732e-5, 1.2626e-5, 1.2556e-5,
25190 1.2544e-5, 1.2604e-5, 1.2719e-5, 1.2883e-5, 1.3164e-5, 1.3581e-5,
25191 1.4187e-5, 1.4866e-5, 1.5669e-5, 1.6717e-5, 1.8148e-5, 2.0268e-5,
25192 2.2456e-5, 2.5582e-5, 2.9183e-5, 3.3612e-5, 3.9996e-5, 4.6829e-5,
25193 5.5055e-5, 6.5897e-5, 7.536e-5, 8.7213e-5, 1.0046e-4, 1.1496e-4,
25194 1.2943e-4, 1.5049e-4, 1.6973e-4, 1.8711e-4, 2.0286e-4, 2.2823e-4,
25195 2.678e-4, 2.8766e-4, 3.1164e-4, 3.364e-4, 3.6884e-4, 3.9159e-4,
25196 3.8712e-4, 3.7433e-4, 3.4503e-4, 3.1003e-4, 2.8027e-4, 2.5253e-4,
25197 2.3408e-4, 2.2836e-4, 2.4442e-4, 2.7521e-4, 2.9048e-4, 3.0489e-4,
25198 3.2646e-4, 3.388e-4, 3.3492e-4, 3.0987e-4, 2.9482e-4, 2.8711e-4,
25199 2.6068e-4, 2.2683e-4, 1.9996e-4, 1.7788e-4, 1.6101e-4, 1.3911e-4,
25200 1.2013e-4, 1.0544e-4, 9.4224e-5, 8.1256e-5, 7.3667e-5, 6.2233e-5,
25201 5.5906e-5, 5.1619e-5, 4.514e-5, 4.0273e-5, 3.3268e-5, 3.0258e-5,
25202 2.644e-5, 2.3103e-5, 2.0749e-5, 1.8258e-5, 1.6459e-5, 1.4097e-5,
25203 1.2052e-5, 1.0759e-5, 9.14e-6, 8.1432e-6, 7.146e-6, 6.4006e-6,
25204 5.6995e-6, 4.9372e-6, 4.4455e-6, 3.9033e-6, 3.474e-6, 3.1269e-6,
25205 2.8059e-6, 2.5558e-6, 2.2919e-6, 2.0846e-6, 1.8983e-6, 1.7329e-6,
25206 1.5929e-6, 1.4631e-6, 1.3513e-6, 1.2461e-6, 1.1519e-6, 1.0682e-6,
25207 9.9256e-7, 9.2505e-7, 8.6367e-7, 8.0857e-7, 7.5674e-7, 7.0934e-7,
25208 6.658e-7, 6.258e-7, 5.8853e-7, 5.5333e-7, 5.2143e-7, 4.9169e-7,
25209 4.6431e-7, 4.3898e-7, 4.1564e-7, 3.9405e-7, 3.7403e-7, 3.5544e-7,
25210 3.3819e-7, 3.2212e-7, 3.0714e-7, 2.9313e-7, 2.8003e-7, 2.6777e-7,
25211 2.5628e-7, 2.4551e-7, 2.354e-7, 2.2591e-7, 2.1701e-7, 2.0866e-7,
25212 2.0082e-7, 1.9349e-7, 1.8665e-7, 1.8027e-7, 1.7439e-7, 1.6894e-7,
25213 1.64e-7, 1.5953e-7, 1.5557e-7, 1.5195e-7, 1.4888e-7, 1.4603e-7,
25214 1.4337e-7, 1.4093e-7, 1.3828e-7, 1.3569e-7, 1.327e-7, 1.2984e-7,
25215 1.2714e-7, 1.2541e-7, 1.2399e-7, 1.2102e-7, 1.1878e-7, 1.1728e-7,
25216 1.1644e-7, 1.1491e-7, 1.1305e-7, 1.1235e-7, 1.1228e-7, 1.1224e-7,
25217 1.1191e-7, 1.1151e-7, 1.1098e-7, 1.1068e-7, 1.1109e-7, 1.1213e-7,
25218 1.1431e-7, 1.1826e-7, 1.2322e-7, 1.3025e-7, 1.4066e-7, 1.5657e-7,
25219 1.7214e-7, 1.9449e-7, 2.2662e-7, 2.6953e-7, 3.1723e-7, 3.7028e-7,
25220 4.4482e-7, 5.3852e-7, 6.2639e-7, 7.2175e-7, 7.7626e-7, 8.7248e-7,
25221 9.6759e-7, 1.0102e-6, 1.062e-6, 1.1201e-6, 1.2107e-6, 1.2998e-6,
25222 1.313e-6, 1.2856e-6, 1.235e-6, 1.1489e-6, 1.0819e-6, 1.012e-6,
25223 9.4795e-7, 9.2858e-7, 9.806e-7, 1.0999e-6, 1.1967e-6, 1.2672e-6,
25224 1.3418e-6, 1.3864e-6, 1.433e-6, 1.4592e-6, 1.4598e-6, 1.4774e-6,
25225 1.4726e-6, 1.482e-6, 1.505e-6, 1.4984e-6, 1.5181e-6, 1.5888e-6,
25226 1.685e-6, 1.769e-6, 1.9277e-6, 2.1107e-6, 2.3068e-6, 2.5347e-6,
25227 2.8069e-6, 3.1345e-6, 3.5822e-6, 3.9051e-6, 4.3422e-6, 4.8704e-6,
25228 5.5351e-6, 6.3454e-6, 7.269e-6, 8.2974e-6, 9.7609e-6, 1.1237e-5,
25229 1.3187e-5, 1.5548e-5, 1.8784e-5, 2.1694e-5, 2.5487e-5, 3.0092e-5,
25230 3.5385e-5, 4.2764e-5, 4.9313e-5, 5.58e-5, 6.2968e-5, 7.106e-5,
25231 7.7699e-5, 8.7216e-5, 8.9335e-5, 9.2151e-5, 9.2779e-5, 9.4643e-5,
25232 9.7978e-5, 1.0008e-4, 1.0702e-4, 1.1026e-4, 1.0828e-4, 1.055e-4,
25233 1.0432e-4, 1.0428e-4, 9.898e-5, 9.4992e-5, 9.5159e-5, 1.0058e-4,
25234 1.0738e-4, 1.155e-4, 1.1229e-4, 1.0596e-4, 1.0062e-4, 9.1742e-5,
25235 8.4492e-5, 6.8099e-5, 5.6295e-5, 4.6502e-5, 3.8071e-5, 3.0721e-5,
25236 2.3297e-5, 1.8688e-5, 1.483e-5, 1.2049e-5, 9.6754e-6, 7.9192e-6,
25237 6.6673e-6, 5.6468e-6, 4.8904e-6, 4.2289e-6, 3.688e-6, 3.2396e-6,
25238 2.8525e-6, 2.5363e-6, 2.2431e-6, 1.9949e-6, 1.7931e-6, 1.6164e-6,
25239 1.4431e-6, 1.2997e-6, 1.1559e-6, 1.0404e-6, 9.43e-7, 8.4597e-7,
25240 7.6133e-7, 6.8623e-7, 6.2137e-7, 5.6345e-7, 5.1076e-7, 4.6246e-7,
25241 4.1906e-7, 3.8063e-7, 3.461e-7, 3.1554e-7, 2.8795e-7, 2.6252e-7,
25242 2.3967e-7, 2.1901e-7, 2.0052e-7, 1.8384e-7, 1.6847e-7, 1.5459e-7,
25243 1.4204e-7, 1.3068e-7, 1.2036e-7, 1.1095e-7, 1.0237e-7, 9.4592e-8,
25244 8.753e-8, 8.1121e-8, 7.5282e-8, 6.9985e-8, 6.5189e-8, 6.0874e-8,
25245 5.6989e-8, 5.353e-8, 5.0418e-8, 4.7745e-8, 4.5367e-8, 4.3253e-8,
25246 4.1309e-8, 3.9695e-8, 3.8094e-8, 3.6482e-8, 3.4897e-8, 3.35e-8,
25247 3.2302e-8, 3.0854e-8, 2.9698e-8, 2.8567e-8, 2.76e-8, 2.6746e-8,
25248 2.5982e-8, 2.551e-8, 2.5121e-8, 2.4922e-8, 2.4909e-8, 2.5013e-8,
25249 2.5216e-8, 2.5589e-8, 2.6049e-8, 2.6451e-8, 2.6978e-8, 2.7687e-8,
25250 2.86e-8, 2.9643e-8, 3.0701e-8, 3.2058e-8, 3.3695e-8, 3.5558e-8,
25251 3.7634e-8, 3.9875e-8, 4.2458e-8, 4.548e-8, 4.8858e-8, 5.2599e-8,
25252 5.703e-8, 6.2067e-8, 6.7911e-8, 7.4579e-8, 8.1902e-8, 8.9978e-8,
25253 9.987e-8, 1.1102e-7, 1.2343e-7, 1.3732e-7, 1.5394e-7, 1.7318e-7,
25254 1.9383e-7, 2.1819e-7, 2.4666e-7, 2.8109e-7, 3.2236e-7, 3.776e-7,
25255 4.4417e-7, 5.2422e-7, 6.1941e-7, 7.4897e-7, 9.2041e-7, 1.1574e-6,
25256 1.4126e-6, 1.7197e-6, 2.1399e-6, 2.6266e-6, 3.3424e-6, 3.8418e-6,
25257 4.514e-6, 5.0653e-6, 5.8485e-6, 6.5856e-6, 6.8937e-6, 6.9121e-6,
25258 6.9005e-6, 6.9861e-6, 6.82e-6, 6.6089e-6, 6.5809e-6, 7.3496e-6,
25259 8.0311e-6, 8.3186e-6, 8.426e-6, 9.0644e-6, 9.4965e-6, 9.4909e-6,
25260 9.016e-6, 9.1494e-6, 9.3629e-6, 9.5944e-6, 9.5459e-6, 8.9919e-6,
25261 8.604e-6, 7.8613e-6, 7.1567e-6, 6.2677e-6, 5.1899e-6, 4.4188e-6,
25262 3.7167e-6, 3.0636e-6, 2.5573e-6, 2.0317e-6, 1.6371e-6, 1.3257e-6,
25263 1.0928e-6, 8.9986e-7, 7.4653e-7, 6.1111e-7, 5.1395e-7, 4.35e-7,
25264 3.7584e-7, 3.2633e-7, 2.8413e-7, 2.4723e-7, 2.1709e-7, 1.9294e-7,
25265 1.7258e-7, 1.5492e-7, 1.382e-7, 1.2389e-7, 1.1189e-7, 1.0046e-7,
25266 9.0832e-8, 8.2764e-8, 7.4191e-8, 6.7085e-8, 6.0708e-8, 5.4963e-8,
25267 4.9851e-8, 4.5044e-8, 4.0916e-8, 3.722e-8, 3.3678e-8, 3.0663e-8,
25268 2.7979e-8, 2.5495e-8, 2.3286e-8, 2.1233e-8, 1.9409e-8, 1.777e-8,
25269 1.626e-8, 1.4885e-8, 1.3674e-8, 1.2543e-8, 1.1551e-8, 1.0655e-8,
25270 9.8585e-9, 9.1398e-9, 8.4806e-9, 7.8899e-9, 7.3547e-9, 6.867e-9,
25271 6.4131e-9, 5.993e-9, 5.6096e-9, 5.2592e-9, 4.9352e-9, 4.6354e-9,
25272 4.3722e-9, 4.125e-9, 3.9081e-9, 3.7118e-9, 3.5372e-9, 3.3862e-9,
25273 3.2499e-9, 3.1324e-9, 3.0313e-9, 2.9438e-9, 2.8686e-9, 2.805e-9,
25274 2.7545e-9, 2.7149e-9, 2.6907e-9, 2.6724e-9, 2.6649e-9, 2.6642e-9,
25275 2.6725e-9, 2.6871e-9, 2.7056e-9, 2.7357e-9, 2.7781e-9, 2.8358e-9,
25276 2.9067e-9, 2.9952e-9, 3.102e-9, 3.2253e-9, 3.3647e-9, 3.5232e-9,
25277 3.7037e-9, 3.9076e-9, 4.1385e-9, 4.3927e-9, 4.6861e-9, 5.0238e-9,
25278 5.4027e-9, 5.8303e-9, 6.3208e-9, 6.8878e-9, 7.5419e-9, 8.313e-9,
25279 9.1952e-9, 1.0228e-8, 1.1386e-8, 1.2792e-8, 1.4521e-8, 1.6437e-8,
25280 1.8674e-8, 2.116e-8, 2.4506e-8, 2.8113e-8, 3.2636e-8, 3.7355e-8,
25281 4.2234e-8, 4.9282e-8, 5.7358e-8, 6.6743e-8, 7.8821e-8, 9.4264e-8,
25282 1.1542e-7, 1.3684e-7, 1.6337e-7, 2.0056e-7, 2.3252e-7, 2.6127e-7,
25283 2.9211e-7, 3.3804e-7, 3.7397e-7, 3.8205e-7, 3.881e-7, 3.9499e-7,
25284 3.9508e-7, 3.7652e-7, 3.5859e-7, 3.6198e-7, 3.7871e-7, 4.0925e-7,
25285 4.2717e-7, 4.8241e-7, 5.2008e-7, 5.653e-7, 5.9531e-7, 6.1994e-7,
25286 6.508e-7, 6.6355e-7, 6.9193e-7, 6.993e-7, 7.3058e-7, 7.4678e-7,
25287 7.9193e-7, 8.3627e-7, 9.1267e-7, 1.0021e-6, 1.1218e-6, 1.2899e-6,
25288 1.4447e-6, 1.7268e-6, 2.0025e-6, 2.3139e-6, 2.5599e-6, 2.892e-6,
25289 3.3059e-6, 3.5425e-6, 3.9522e-6, 4.0551e-6, 4.2818e-6, 4.2892e-6,
25290 4.421e-6, 4.5614e-6, 4.6739e-6, 4.9482e-6, 5.1118e-6, 5.0986e-6,
25291 4.9417e-6, 4.9022e-6, 4.8449e-6, 4.8694e-6, 4.8111e-6, 4.9378e-6,
25292 5.3231e-6, 5.7362e-6, 6.235e-6, 6.0951e-6, 5.7281e-6, 5.4585e-6,
25293 4.9032e-6, 4.3009e-6, 3.4776e-6, 2.8108e-6, 2.2993e-6, 1.7999e-6,
25294 1.387e-6, 1.075e-6, 8.5191e-7, 6.7951e-7, 5.5336e-7, 4.6439e-7,
25295 4.0243e-7, 3.5368e-7, 3.1427e-7, 2.7775e-7, 2.4486e-7, 2.1788e-7,
25296 1.9249e-7, 1.7162e-7, 1.5115e-7, 1.3478e-7, 1.2236e-7, 1.1139e-7,
25297 1.0092e-7, 9.0795e-8, 8.2214e-8, 7.4691e-8, 6.7486e-8, 6.0414e-8,
25298 5.4584e-8, 4.8754e-8, 4.3501e-8, 3.8767e-8, 3.4363e-8, 3.0703e-8,
25299 2.7562e-8, 2.4831e-8, 2.2241e-8, 1.9939e-8, 1.8049e-8, 1.6368e-8,
25300 1.4863e-8, 1.346e-8, 1.2212e-8, 1.1155e-8, 1.0185e-8, 9.3417e-9,
25301 8.5671e-9, 7.8292e-9, 7.1749e-9, 6.5856e-9, 6.0588e-9, 5.5835e-9,
25302 5.135e-9, 4.7395e-9, 4.3771e-9, 4.0476e-9, 3.756e-9, 3.4861e-9,
25303 3.2427e-9, 3.024e-9, 2.8278e-9, 2.6531e-9, 2.4937e-9, 2.3511e-9,
25304 2.2245e-9, 2.1133e-9, 2.0159e-9, 1.933e-9, 1.8669e-9, 1.8152e-9,
25305 1.7852e-9, 1.7752e-9, 1.7823e-9, 1.8194e-9, 1.8866e-9, 1.9759e-9,
25306 2.0736e-9, 2.2083e-9, 2.3587e-9, 2.4984e-9, 2.6333e-9, 2.816e-9,
25307 3.0759e-9, 3.372e-9, 3.6457e-9, 4.0668e-9, 4.4541e-9, 4.7976e-9,
25308 5.0908e-9, 5.4811e-9, 6.1394e-9, 6.3669e-9, 6.5714e-9, 6.8384e-9,
25309 7.1918e-9, 7.3741e-9, 7.2079e-9, 7.2172e-9, 7.2572e-9, 7.3912e-9,
25310 7.6188e-9, 8.3291e-9, 8.7885e-9, 9.2412e-9, 1.0021e-8, 1.0752e-8,
25311 1.1546e-8, 1.1607e-8, 1.1949e-8, 1.2346e-8, 1.2516e-8, 1.2826e-8,
25312 1.3053e-8, 1.3556e-8, 1.4221e-8, 1.5201e-8, 1.6661e-8, 1.8385e-8,
25313 2.0585e-8, 2.3674e-8, 2.7928e-8, 3.3901e-8, 4.1017e-8, 4.9595e-8,
25314 6.0432e-8, 7.6304e-8, 9.0764e-8, 1.0798e-7, 1.2442e-7, 1.4404e-7,
25315 1.6331e-7, 1.8339e-7, 2.0445e-7, 2.2288e-7, 2.3083e-7, 2.3196e-7,
25316 2.3919e-7, 2.3339e-7, 2.3502e-7, 2.3444e-7, 2.6395e-7, 2.9928e-7,
25317 3.0025e-7, 3.0496e-7, 3.1777e-7, 3.4198e-7, 3.4739e-7, 3.2696e-7,
25318 3.41e-7, 3.5405e-7, 3.7774e-7, 3.8285e-7, 3.6797e-7, 3.58e-7,
25319 3.2283e-7, 2.9361e-7, 2.4881e-7, 2.0599e-7, 1.7121e-7, 1.3641e-7,
25320 1.1111e-7, 8.9413e-8, 7.3455e-8, 6.2078e-8, 5.2538e-8, 4.5325e-8,
25321 3.9005e-8, 3.4772e-8, 3.1203e-8, 2.8132e-8, 2.525e-8, 2.2371e-8,
25322 2.0131e-8, 1.7992e-8, 1.6076e-8, 1.4222e-8, 1.249e-8, 1.1401e-8,
25323 1.0249e-8, 9.2279e-9, 8.5654e-9, 7.6227e-9, 6.9648e-9, 6.2466e-9,
25324 5.7252e-9, 5.38e-9, 4.696e-9, 4.2194e-9, 3.7746e-9, 3.3813e-9,
25325 3.0656e-9, 2.6885e-9, 2.4311e-9, 2.1572e-9, 1.8892e-9, 1.7038e-9,
25326 1.4914e-9, 1.3277e-9, 1.1694e-9, 1.0391e-9, 9.2779e-10,
25327 8.3123e-10, 7.4968e-10, 6.8385e-10, 6.2915e-10, 5.7784e-10,
25328 5.2838e-10, 4.8382e-10, 4.4543e-10, 4.1155e-10, 3.7158e-10,
25329 3.3731e-10, 3.0969e-10, 2.8535e-10, 2.6416e-10, 2.4583e-10,
25330 2.2878e-10, 2.1379e-10, 2.0073e-10, 1.8907e-10, 1.7866e-10,
25331 1.6936e-10, 1.6119e-10, 1.5424e-10, 1.4847e-10, 1.4401e-10,
25332 1.4068e-10, 1.3937e-10, 1.3943e-10, 1.4281e-10, 1.4766e-10,
25333 1.5701e-10, 1.7079e-10, 1.8691e-10, 2.0081e-10, 2.174e-10,
25334 2.4847e-10, 2.6463e-10, 2.7087e-10, 2.7313e-10, 2.8352e-10,
25335 2.9511e-10, 2.8058e-10, 2.7227e-10, 2.7356e-10, 2.8012e-10,
25336 2.8034e-10, 2.9031e-10, 3.103e-10, 3.3745e-10, 3.8152e-10,
25337 4.0622e-10, 4.2673e-10, 4.3879e-10, 4.5488e-10, 4.7179e-10,
25338 4.614e-10, 4.6339e-10, 4.6716e-10, 4.7024e-10, 4.7931e-10,
25339 4.8503e-10, 4.9589e-10, 4.9499e-10, 5.0363e-10, 5.3184e-10,
25340 5.6451e-10, 6.0932e-10, 6.6469e-10, 7.4076e-10, 8.3605e-10,
25341 9.4898e-10, 1.0935e-9, 1.2593e-9, 1.4913e-9, 1.8099e-9, 2.1842e-9,
25342 2.7284e-9, 3.2159e-9, 3.7426e-9, 4.5226e-9, 5.3512e-9, 6.1787e-9,
25343 6.8237e-9, 7.9421e-9, 9.0002e-9, 9.6841e-9, 9.9558e-9, 1.0232e-8,
25344 1.0591e-8, 1.0657e-8, 1.0441e-8, 1.0719e-8, 1.1526e-8, 1.2962e-8,
25345 1.4336e-8, 1.615e-8, 1.8417e-8, 2.0725e-8, 2.3426e-8, 2.5619e-8,
25346 2.7828e-8, 3.0563e-8, 3.3438e-8, 3.6317e-8, 4.04e-8, 4.4556e-8,
25347 5.0397e-8, 5.3315e-8, 5.9185e-8, 6.5311e-8, 6.9188e-8, 7.7728e-8,
25348 7.9789e-8, 8.6598e-8, 8.7768e-8, 9.1773e-8, 9.7533e-8, 1.0007e-7,
25349 1.065e-7, 1.0992e-7, 1.0864e-7, 1.0494e-7, 1.0303e-7, 1.0031e-7,
25350 1.0436e-7, 1.0537e-7, 1.1184e-7, 1.2364e-7, 1.3651e-7, 1.4881e-7,
25351 1.4723e-7, 1.4118e-7, 1.3371e-7, 1.1902e-7, 1.0007e-7, 7.9628e-8,
25352 6.4362e-8, 5.0243e-8, 3.8133e-8, 2.94e-8, 2.3443e-8, 1.9319e-8,
25353 1.6196e-8, 1.4221e-8, 1.2817e-8, 1.1863e-8, 1.1383e-8, 1.1221e-8,
25354 1.1574e-8, 1.1661e-8, 1.2157e-8, 1.2883e-8, 1.3295e-8, 1.4243e-8,
25355 1.424e-8, 1.4614e-8, 1.4529e-8, 1.4685e-8, 1.4974e-8, 1.479e-8,
25356 1.489e-8, 1.4704e-8, 1.4142e-8, 1.3374e-8, 1.2746e-8, 1.2172e-8,
25357 1.2336e-8, 1.2546e-8, 1.3065e-8, 1.409e-8, 1.5215e-8, 1.654e-8,
25358 1.6144e-8, 1.5282e-8, 1.4358e-8, 1.2849e-8, 1.0998e-8, 8.6956e-9,
25359 7.0881e-9, 5.5767e-9, 4.2792e-9, 3.2233e-9, 2.502e-9, 1.9985e-9,
25360 1.5834e-9, 1.3015e-9, 1.0948e-9, 9.4141e-10, 8.1465e-10,
25361 7.1517e-10, 6.2906e-10, 5.5756e-10, 4.9805e-10, 4.3961e-10,
25362 3.9181e-10, 3.5227e-10, 3.167e-10, 2.8667e-10, 2.5745e-10,
25363 2.3212e-10, 2.0948e-10, 1.897e-10, 1.7239e-10, 1.5659e-10,
25364 1.4301e-10, 1.3104e-10, 1.2031e-10, 1.1095e-10, 1.0262e-10,
25365 9.513e-11, 8.8595e-11, 8.2842e-11, 7.7727e-11, 7.3199e-11,
25366 6.9286e-11, 6.5994e-11, 6.3316e-11, 6.1244e-11, 5.9669e-11,
25367 5.8843e-11, 5.8832e-11, 5.9547e-11, 6.1635e-11, 6.4926e-11,
25368 7.0745e-11, 7.8802e-11, 8.6724e-11, 1.0052e-10, 1.1575e-10,
25369 1.3626e-10, 1.5126e-10, 1.6751e-10, 1.9239e-10, 2.1748e-10,
25370 2.2654e-10, 2.2902e-10, 2.324e-10, 2.4081e-10, 2.393e-10,
25371 2.2378e-10, 2.2476e-10, 2.2791e-10, 2.4047e-10, 2.5305e-10,
25372 2.8073e-10, 3.1741e-10, 3.6592e-10, 4.1495e-10, 4.6565e-10,
25373 5.099e-10, 5.5607e-10, 6.1928e-10, 6.6779e-10, 7.335e-10,
25374 8.1434e-10, 8.9635e-10, 9.9678e-10, 1.1256e-9, 1.2999e-9,
25375 1.4888e-9, 1.7642e-9, 1.9606e-9, 2.2066e-9, 2.4601e-9, 2.7218e-9,
25376 3.0375e-9, 3.1591e-9, 3.2852e-9, 3.2464e-9, 3.3046e-9, 3.271e-9,
25377 3.2601e-9, 3.3398e-9, 3.7446e-9, 4.0795e-9, 4.0284e-9, 4.0584e-9,
25378 4.1677e-9, 4.5358e-9, 4.4097e-9, 4.2744e-9, 4.5449e-9, 4.8147e-9,
25379 5.2656e-9, 5.2476e-9, 5.0275e-9, 4.7968e-9, 4.3654e-9, 3.953e-9,
25380 3.2447e-9, 2.6489e-9, 2.1795e-9, 1.788e-9, 1.4309e-9, 1.1256e-9,
25381 9.1903e-10, 7.6533e-10, 6.3989e-10, 5.5496e-10, 4.9581e-10,
25382 4.5722e-10, 4.3898e-10, 4.3505e-10, 4.3671e-10, 4.5329e-10,
25383 4.6827e-10, 4.9394e-10, 5.1122e-10, 5.1649e-10, 5.0965e-10,
25384 4.9551e-10, 4.8928e-10, 4.7947e-10, 4.7989e-10, 4.9071e-10,
25385 4.8867e-10, 4.726e-10, 4.5756e-10, 4.54e-10, 4.5993e-10,
25386 4.4042e-10, 4.3309e-10, 4.4182e-10, 4.6735e-10, 5.0378e-10,
25387 5.2204e-10, 5.0166e-10, 4.6799e-10, 4.3119e-10, 3.8803e-10,
25388 3.3291e-10, 2.6289e-10, 2.1029e-10, 1.7011e-10, 1.3345e-10,
25389 1.0224e-10, 7.8207e-11, 6.2451e-11, 5.0481e-11, 4.1507e-11,
25390 3.5419e-11, 3.0582e-11, 2.69e-11, 2.3778e-11, 2.1343e-11,
25391 1.9182e-11, 1.7162e-11, 1.5391e-11, 1.3877e-11, 1.2619e-11,
25392 1.145e-11, 1.0461e-11, 9.6578e-12, 8.9579e-12, 8.3463e-12,
25393 7.8127e-12, 7.3322e-12, 6.9414e-12, 6.6037e-12, 6.3285e-12,
25394 6.1095e-12, 5.9387e-12, 5.8118e-12, 5.726e-12, 5.6794e-12,
25395 5.6711e-12, 5.7003e-12, 5.767e-12, 5.8717e-12, 6.0151e-12,
25396 6.1984e-12, 6.4232e-12, 6.6918e-12, 7.0065e-12, 7.3705e-12,
25397 7.7873e-12, 8.2612e-12, 8.7972e-12, 9.4009e-12, 1.0079e-11,
25398 1.084e-11, 1.1692e-11, 1.2648e-11, 1.3723e-11, 1.4935e-11,
25399 1.6313e-11, 1.7905e-11, 1.974e-11, 2.1898e-11, 2.4419e-11,
25400 2.7426e-11, 3.0869e-11, 3.4235e-11, 3.7841e-11, 4.1929e-11,
25401 4.6776e-11, 5.2123e-11, 5.8497e-11, 6.5294e-11, 7.4038e-11,
25402 8.4793e-11, 9.6453e-11, 1.1223e-10, 1.2786e-10, 1.4882e-10,
25403 1.7799e-10, 2.0766e-10, 2.4523e-10, 2.8591e-10, 3.3386e-10,
25404 4.0531e-10, 4.7663e-10, 5.4858e-10, 6.3377e-10, 7.1688e-10,
25405 8.4184e-10, 9.5144e-10, 1.0481e-9, 1.1356e-9, 1.2339e-9,
25406 1.3396e-9, 1.4375e-9, 1.5831e-9, 1.7323e-9, 1.9671e-9, 2.2976e-9,
25407 2.6679e-9, 3.0777e-9, 3.4321e-9, 3.8192e-9, 4.2711e-9, 4.4903e-9,
25408 4.8931e-9, 5.2253e-9, 5.404e-9, 5.6387e-9, 5.6704e-9, 6.0345e-9,
25409 6.1079e-9, 6.2576e-9, 6.4039e-9, 6.3776e-9, 6.1878e-9, 5.8616e-9,
25410 5.7036e-9, 5.584e-9, 5.6905e-9, 5.8931e-9, 6.2478e-9, 6.8291e-9,
25411 7.4528e-9, 7.6078e-9, 7.3898e-9, 6.7573e-9, 5.9827e-9, 5.0927e-9,
25412 4.0099e-9, 3.1933e-9, 2.4296e-9, 1.8485e-9, 1.4595e-9, 1.2017e-9,
25413 1.0164e-9, 8.7433e-10, 7.7108e-10, 7.0049e-10, 6.5291e-10,
25414 6.1477e-10, 5.9254e-10, 5.815e-10, 5.7591e-10, 5.849e-10,
25415 5.8587e-10, 5.9636e-10, 6.2408e-10, 6.5479e-10, 7.048e-10,
25416 7.2313e-10, 7.5524e-10, 8.0863e-10, 8.3386e-10, 9.2342e-10,
25417 9.6754e-10, 1.0293e-9, 1.0895e-9, 1.133e-9, 1.221e-9, 1.2413e-9,
25418 1.2613e-9, 1.2671e-9, 1.2225e-9, 1.1609e-9, 1.0991e-9, 1.06e-9,
25419 1.057e-9, 1.0818e-9, 1.1421e-9, 1.227e-9, 1.337e-9, 1.4742e-9,
25420 1.4946e-9, 1.4322e-9, 1.321e-9, 1.1749e-9, 1.0051e-9, 7.8387e-10,
25421 6.1844e-10, 4.6288e-10, 3.4164e-10, 2.5412e-10, 1.9857e-10,
25422 1.5876e-10, 1.2966e-10, 1.092e-10, 9.4811e-11, 8.3733e-11,
25423 7.3906e-11, 6.7259e-11, 6.1146e-11, 5.7119e-11, 5.3546e-11,
25424 4.8625e-11, 4.4749e-11, 4.1089e-11, 3.7825e-11, 3.4465e-11,
25425 3.1018e-11, 2.8109e-11, 2.561e-11, 2.2859e-11, 2.049e-11,
25426 1.8133e-11, 1.5835e-11, 1.3949e-11, 1.2295e-11, 1.0799e-11,
25427 9.6544e-12, 8.7597e-12, 7.999e-12, 7.3973e-12, 6.9035e-12,
25428 6.4935e-12, 6.1195e-12, 5.8235e-12, 5.5928e-12, 5.4191e-12,
25429 5.2993e-12, 5.2338e-12, 5.2272e-12, 5.2923e-12, 5.4252e-12,
25430 5.6523e-12, 5.9433e-12, 6.3197e-12, 6.9016e-12, 7.5016e-12,
25431 8.2885e-12, 9.405e-12, 1.0605e-11, 1.2257e-11, 1.3622e-11,
25432 1.5353e-11, 1.7543e-11, 1.9809e-11, 2.2197e-11, 2.4065e-11,
25433 2.6777e-11, 2.9751e-11, 3.2543e-11, 3.5536e-11, 3.9942e-11,
25434 4.6283e-11, 5.4556e-11, 6.549e-11, 7.6803e-11, 9.0053e-11,
25435 1.0852e-10, 1.2946e-10, 1.4916e-10, 1.7748e-10, 2.0073e-10,
25436 2.2485e-10, 2.5114e-10, 2.7715e-10, 3.1319e-10, 3.3305e-10,
25437 3.5059e-10, 3.5746e-10, 3.6311e-10, 3.7344e-10, 3.6574e-10,
25438 3.7539e-10, 3.9434e-10, 4.351e-10, 4.334e-10, 4.2588e-10,
25439 4.3977e-10, 4.6062e-10, 4.7687e-10, 4.6457e-10, 4.8578e-10,
25440 5.2344e-10, 5.6752e-10, 5.8702e-10, 5.6603e-10, 5.3784e-10,
25441 4.9181e-10, 4.3272e-10, 3.5681e-10, 2.8814e-10, 2.332e-10,
25442 1.8631e-10, 1.4587e-10, 1.1782e-10, 9.8132e-11, 8.2528e-11,
25443 6.9174e-11, 6.1056e-11, 5.3459e-11, 4.7116e-11, 4.1878e-11,
25444 3.8125e-11, 3.6347e-11, 3.5071e-11, 3.3897e-11, 3.3541e-11,
25445 3.3563e-11, 3.5469e-11, 3.8111e-11, 3.8675e-11, 4.1333e-11,
25446 4.3475e-11, 4.6476e-11, 4.9761e-11, 5.138e-11, 5.4135e-11,
25447 5.3802e-11, 5.5158e-11, 5.6864e-11, 5.9311e-11, 6.3827e-11,
25448 6.7893e-11, 6.823e-11, 6.6694e-11, 6.6018e-11, 6.4863e-11,
25449 6.5893e-11, 6.3813e-11, 6.4741e-11, 6.863e-11, 7.0255e-11,
25450 7.0667e-11, 6.881e-11, 6.4104e-11, 5.8136e-11, 4.7242e-11,
25451 3.7625e-11, 3.1742e-11, 2.5581e-11, 1.8824e-11, 1.3303e-11,
25452 9.6919e-12, 7.5353e-12, 6.0986e-12, 5.0742e-12, 4.3094e-12,
25453 3.719e-12, 3.252e-12, 2.8756e-12, 2.568e-12, 2.3139e-12,
25454 2.1025e-12, 1.9257e-12, 1.7777e-12, 1.6539e-12, 1.5508e-12,
25455 1.4657e-12, 1.3966e-12, 1.3417e-12, 1.2998e-12, 1.27e-12,
25456 1.2514e-12, 1.2437e-12, 1.2463e-12, 1.2592e-12, 1.2823e-12,
25457 1.3157e-12, 1.3596e-12, 1.4144e-12, 1.4806e-12, 1.5588e-12,
25458 1.6497e-12, 1.7544e-12, 1.8738e-12, 2.0094e-12, 2.1626e-12,
25459 2.3354e-12, 2.5297e-12, 2.7483e-12, 2.9941e-12, 3.2708e-12,
25460 3.5833e-12, 3.9374e-12, 4.3415e-12, 4.8079e-12, 5.3602e-12,
25461 5.9816e-12, 6.7436e-12, 7.6368e-12, 8.6812e-12, 9.8747e-12,
25462 1.135e-11, 1.3181e-11, 1.5406e-11, 1.7868e-11, 2.0651e-11,
25463 2.4504e-11, 2.9184e-11, 3.4159e-11, 3.9979e-11, 4.8704e-11,
25464 5.7856e-11, 6.7576e-11, 7.9103e-11, 9.437e-11, 1.1224e-10,
25465 1.3112e-10, 1.5674e-10, 1.8206e-10, 2.0576e-10, 2.3187e-10,
25466 2.7005e-10, 3.0055e-10, 3.3423e-10, 3.6956e-10, 3.8737e-10,
25467 4.263e-10, 4.5154e-10, 4.8383e-10, 5.3582e-10, 5.8109e-10,
25468 6.3741e-10, 6.3874e-10, 6.387e-10, 6.5818e-10, 6.5056e-10,
25469 6.5291e-10, 6.3159e-10, 6.3984e-10, 6.4549e-10, 6.5444e-10,
25470 6.7035e-10, 6.7665e-10, 6.9124e-10, 6.8451e-10, 6.9255e-10,
25471 6.9923e-10, 7.0396e-10, 6.7715e-10, 6.0371e-10, 5.3774e-10,
25472 4.6043e-10, 3.7635e-10, 2.9484e-10, 2.2968e-10, 1.8185e-10,
25473 1.4191e-10, 1.1471e-10, 9.479e-11, 7.9613e-11, 6.7989e-11,
25474 5.9391e-11, 5.281e-11, 4.7136e-11, 4.2618e-11, 3.8313e-11,
25475 3.4686e-11, 3.1669e-11, 2.911e-11, 2.6871e-11, 2.5074e-11,
25476 2.4368e-11, 2.3925e-11, 2.4067e-11, 2.4336e-11, 2.4704e-11,
25477 2.5823e-11, 2.7177e-11, 2.9227e-11, 3.1593e-11, 3.573e-11,
25478 4.0221e-11, 4.3994e-11, 4.8448e-11, 5.3191e-11, 5.8552e-11,
25479 6.3458e-11, 6.6335e-11, 7.2457e-11, 7.9091e-11, 8.2234e-11,
25480 8.7668e-11, 8.7951e-11, 9.2952e-11, 9.6157e-11, 9.5926e-11,
25481 1.012e-10, 1.0115e-10, 9.9577e-11, 9.6633e-11, 9.2891e-11,
25482 9.3315e-11, 9.5584e-11, 1.0064e-10, 1.0509e-10, 1.1455e-10,
25483 1.2443e-10, 1.2963e-10, 1.2632e-10, 1.1308e-10, 1.0186e-10,
25484 8.588e-11, 6.7863e-11, 5.1521e-11, 3.778e-11, 2.8842e-11,
25485 2.2052e-11, 1.7402e-11, 1.4406e-11, 1.1934e-11, 1.0223e-11,
25486 8.9544e-12, 7.9088e-12, 7.0675e-12, 6.2222e-12, 5.6051e-12,
25487 5.0502e-12, 4.5578e-12, 4.2636e-12, 3.9461e-12, 3.7599e-12,
25488 3.5215e-12, 3.2467e-12, 3.0018e-12, 2.6558e-12, 2.3928e-12,
25489 2.0707e-12, 1.7575e-12, 1.5114e-12, 1.2941e-12, 1.1004e-12,
25490 9.5175e-13, 8.2894e-13, 7.3253e-13, 6.5551e-13, 5.9098e-13,
25491 5.3548e-13, 4.8697e-13, 4.4413e-13, 4.06e-13, 3.7188e-13,
25492 3.4121e-13, 3.1356e-13, 2.8856e-13, 2.659e-13, 2.4533e-13,
25493 2.2663e-13, 2.096e-13, 1.9407e-13, 1.799e-13, 1.6695e-13,
25494 1.5512e-13, 1.4429e-13, 1.3437e-13, 1.2527e-13, 1.1693e-13,
25495 1.0927e-13, 1.0224e-13, 9.5767e-14, 8.9816e-14, 8.4335e-14,
25496 7.9285e-14, 7.4626e-14, 7.0325e-14, 6.6352e-14, 6.2676e-14,
25497 5.9274e-14, 5.6121e-14, 5.3195e-14, 5.0479e-14, 4.7953e-14,
25498 4.5602e-14, 4.3411e-14, 4.1367e-14, 3.9456e-14, 3.767e-14,
25499 3.5996e-14, 3.4427e-14, 3.2952e-14, 3.1566e-14, 3.0261e-14,
25500 2.903e-14, 2.7868e-14, 2.677e-14, 2.573e-14, 2.4745e-14,
25501 2.3809e-14, 2.2921e-14, 2.2076e-14, 2.1271e-14, 2.0504e-14,
25502 1.9772e-14, 1.9073e-14, 1.8404e-14, 1.7764e-14, 1.7151e-14,
25503 1.6564e-14, 1.6e-14, 1.5459e-14, 1.4939e-14, 1.4439e-14,
25504 1.3958e-14, 1.3495e-14, 1.3049e-14, 1.262e-14, 1.2206e-14,
25505 1.1807e-14, 1.1422e-14, 1.105e-14, 1.0691e-14, 1.0345e-14,
25506 1.001e-14, 9.687e-15, 9.3747e-15, 9.0727e-15, 8.7808e-15,
25507 8.4986e-15, 8.2257e-15, 7.9617e-15, 7.7064e-15, 7.4594e-15,
25508 7.2204e-15, 6.9891e-15, 6.7653e-15, 6.5488e-15, 6.3392e-15,
25509 6.1363e-15, 5.9399e-15, 5.7499e-15, 5.5659e-15, 5.3878e-15,
25510 5.2153e-15, 5.0484e-15, 4.8868e-15, 4.7303e-15, 4.5788e-15,
25511 4.4322e-15, 4.2902e-15, 4.1527e-15, 4.0196e-15, 3.8907e-15,
25512 3.7659e-15, 3.6451e-15, 3.5281e-15, 3.4149e-15, 3.3052e-15,
25513 3.1991e-15, 3.0963e-15, 2.9967e-15, 2.9004e-15, 2.8071e-15,
25514 2.7167e-15, 2.6293e-15, 2.5446e-15, 2.4626e-15, 2.3833e-15,
25515 2.3064e-15, 2.232e-15, 2.16e-15, 2.0903e-15, 2.0228e-15,
25516 1.9574e-15, 1.8942e-15, 1.8329e-15, 1.7736e-15, 1.7163e-15,
25517 1.6607e-15, 1.6069e-15, 1.5548e-15, 1.5044e-15, 1.4557e-15,
25518 1.4084e-15, 1.3627e-15, 1.3185e-15, 1.2757e-15, 1.2342e-15,
25519 1.1941e-15, 1.1552e-15, 1.1177e-15, 1.0813e-15, 1.0461e-15,
25520 1.012e-15, 9.79e-16, 9.4707e-16, 9.1618e-16, 8.8628e-16,
25521 8.5734e-16, 8.2933e-16, 8.0223e-16, 7.76e-16, 7.5062e-16,
25522 7.2606e-16, 7.0229e-16, 6.7929e-16, 6.5703e-16, 6.355e-16,
25523 6.1466e-16, 5.9449e-16, 5.7498e-16, 5.561e-16, 5.3783e-16,
25524 5.2015e-16, 5.0305e-16, 4.865e-16, 4.7049e-16, 4.55e-16,
25525 4.4002e-16, 4.2552e-16, 4.1149e-16, 3.9792e-16, 3.8479e-16,
25526 3.7209e-16, 3.5981e-16, 3.4792e-16, 3.3642e-16, 3.253e-16,
25527 3.1454e-16, 3.0413e-16, 2.9406e-16, 2.8432e-16, 2.749e-16,
25528 2.6579e-16, 2.5697e-16, 2.4845e-16, 2.402e-16, 2.3223e-16,
25529 2.2451e-16, 2.1705e-16, 2.0984e-16, 2.0286e-16, 1.9611e-16,
25530 1.8958e-16, 1.8327e-16, 1.7716e-16, 1.7126e-16, 1.6555e-16,
25531 1.6003e-16, 1.5469e-16, 1.4952e-16, 1.4453e-16, 1.397e-16,
25532 1.3503e-16 } };
25533
25534struct s_sh2ob_ {
25535 double e_1[3];
25536 int e_2;
25537 } sh2ob_ = { {-20., 2e4, 10.}, 2003 };
25538
25539struct s_s260a_ {
25540 double e_1[2003];
25541 } s260a_ = { {.1775, .17045, .16457, .17045, .1775, .20036, .21347, .22454,
25542 .23428, .23399, .23022, .20724, .19712, .18317, .16724, .1478,
25543 .12757, .11626, .10098, .089033, .07977, .067416, .059588,
25544 .051117, .046218, .042179, .034372, .029863, .025252, .022075,
25545 .019209, .015816, .013932, .011943, .010079, .0087667, .0074094,
25546 .0064967, .0055711, .0048444, .0042552, .0036953, .0032824,
25547 .0029124, .0026102, .002337, .00211, .0019008, .0017145, .0015573,
25548 .0014206, .0012931, .0011803, .0010774, 9.8616e-4, 9.0496e-4,
25549 8.3071e-4, 7.6319e-4, 7.0149e-4, 6.4637e-4, 5.9566e-4, 5.4987e-4,
25550 5.0768e-4, 4.688e-4, 4.3317e-4, 4.0037e-4, 3.7064e-4, 3.4325e-4,
25551 3.1809e-4, 2.9501e-4, 2.7382e-4, 2.543e-4, 2.363e-4, 2.1977e-4,
25552 2.0452e-4, 1.9042e-4, 1.774e-4, 1.6544e-4, 1.5442e-4, 1.4425e-4,
25553 1.3486e-4, 1.2618e-4, 1.1817e-4, 1.1076e-4, 1.0391e-4, 9.7563e-5,
25554 9.1696e-5, 8.6272e-5, 8.1253e-5, 7.6607e-5, 7.2302e-5, 6.8311e-5,
25555 6.4613e-5, 6.1183e-5, 5.8001e-5, 5.5048e-5, 5.2307e-5, 4.9761e-5,
25556 4.7395e-5, 4.5197e-5, 4.3155e-5, 4.1256e-5, 3.9491e-5, 3.7849e-5,
25557 3.6324e-5, 3.4908e-5, 3.3594e-5, 3.2374e-5, 3.1244e-5, 3.0201e-5,
25558 2.924e-5, 2.8356e-5, 2.7547e-5, 2.6814e-5, 2.6147e-5, 2.5551e-5,
25559 2.5029e-5, 2.4582e-5, 2.4203e-5, 2.3891e-5, 2.3663e-5, 2.3531e-5,
25560 2.3483e-5, 2.3516e-5, 2.3694e-5, 2.4032e-5, 2.4579e-5, 2.5234e-5,
25561 2.6032e-5, 2.7119e-5, 2.8631e-5, 3.0848e-5, 3.3262e-5, 3.6635e-5,
25562 4.0732e-5, 4.5923e-5, 5.3373e-5, 6.1875e-5, 7.2031e-5, 8.598e-5,
25563 9.8642e-5, 1.1469e-4, 1.3327e-4, 1.539e-4, 1.7513e-4, 2.0665e-4,
25564 2.3609e-4, 2.622e-4, 2.8677e-4, 3.259e-4, 3.8624e-4, 4.157e-4,
25565 4.5207e-4, 4.9336e-4, 5.45e-4, 5.8258e-4, 5.8086e-4, 5.6977e-4,
25566 5.3085e-4, 4.802e-4, 4.3915e-4, 4.0343e-4, 3.7853e-4, 3.7025e-4,
25567 3.9637e-4, 4.4675e-4, 4.7072e-4, 4.9022e-4, 5.2076e-4, 5.3676e-4,
25568 5.2755e-4, 4.8244e-4, 4.5473e-4, 4.3952e-4, 3.9614e-4, 3.4086e-4,
25569 2.9733e-4, 2.6367e-4, 2.3767e-4, 2.0427e-4, 1.7595e-4, 1.5493e-4,
25570 1.3851e-4, 1.1874e-4, 1.0735e-4, 9.049e-5, 8.1149e-5, 7.4788e-5,
25571 6.5438e-5, 5.8248e-5, 4.8076e-5, 4.3488e-5, 3.7856e-5, 3.3034e-5,
25572 2.9592e-5, 2.6088e-5, 2.3497e-5, 2.0279e-5, 1.7526e-5, 1.5714e-5,
25573 1.3553e-5, 1.2145e-5, 1.0802e-5, 9.7681e-6, 8.8196e-6, 7.8291e-6,
25574 7.1335e-6, 6.4234e-6, 5.8391e-6, 5.3532e-6, 4.9079e-6, 4.5378e-6,
25575 4.1716e-6, 3.8649e-6, 3.5893e-6, 3.3406e-6, 3.1199e-6, 2.9172e-6,
25576 2.7348e-6, 2.5644e-6, 2.4086e-6, 2.2664e-6, 2.1359e-6, 2.0159e-6,
25577 1.9051e-6, 1.8031e-6, 1.7074e-6, 1.6185e-6, 1.5356e-6, 1.4584e-6,
25578 1.3861e-6, 1.3179e-6, 1.2545e-6, 1.1951e-6, 1.1395e-6, 1.0873e-6,
25579 1.0384e-6, 9.925e-7, 9.4935e-7, 9.0873e-7, 8.705e-7, 8.3446e-7,
25580 8.0046e-7, 7.6834e-7, 7.38e-7, 7.0931e-7, 6.8217e-7, 6.5648e-7,
25581 6.3214e-7, 6.0909e-7, 5.8725e-7, 5.6655e-7, 5.4693e-7, 5.2835e-7,
25582 5.1077e-7, 4.9416e-7, 4.7853e-7, 4.6381e-7, 4.5007e-7, 4.3728e-7,
25583 4.255e-7, 4.145e-7, 4.0459e-7, 3.9532e-7, 3.8662e-7, 3.7855e-7,
25584 3.7041e-7, 3.6254e-7, 3.542e-7, 3.4617e-7, 3.3838e-7, 3.3212e-7,
25585 3.2655e-7, 3.1865e-7, 3.1203e-7, 3.067e-7, 3.0252e-7, 2.9749e-7,
25586 2.9184e-7, 2.8795e-7, 2.8501e-7, 2.8202e-7, 2.7856e-7, 2.7509e-7,
25587 2.7152e-7, 2.6844e-7, 2.6642e-7, 2.6548e-7, 2.6617e-7, 2.6916e-7,
25588 2.7372e-7, 2.8094e-7, 2.9236e-7, 3.1035e-7, 3.2854e-7, 3.5481e-7,
25589 3.9377e-7, 4.4692e-7, 5.0761e-7, 5.7715e-7, 6.7725e-7, 8.0668e-7,
25590 9.3716e-7, 1.0797e-6, 1.1689e-6, 1.3217e-6, 1.4814e-6, 1.5627e-6,
25591 1.6519e-6, 1.7601e-6, 1.906e-6, 2.0474e-6, 2.0716e-6, 2.0433e-6,
25592 1.9752e-6, 1.8466e-6, 1.7526e-6, 1.6657e-6, 1.587e-6, 1.5633e-6,
25593 1.652e-6, 1.8471e-6, 1.9953e-6, 2.0975e-6, 2.2016e-6, 2.2542e-6,
25594 2.3081e-6, 2.3209e-6, 2.2998e-6, 2.3056e-6, 2.2757e-6, 2.2685e-6,
25595 2.2779e-6, 2.2348e-6, 2.2445e-6, 2.3174e-6, 2.4284e-6, 2.529e-6,
25596 2.734e-6, 2.972e-6, 3.2332e-6, 3.5392e-6, 3.9013e-6, 4.3334e-6,
25597 4.9088e-6, 5.3428e-6, 5.9142e-6, 6.6106e-6, 7.4709e-6, 8.5019e-6,
25598 9.6835e-6, 1.0984e-5, 1.2831e-5, 1.4664e-5, 1.708e-5, 2.0103e-5,
25599 2.4148e-5, 2.7948e-5, 3.2855e-5, 3.9046e-5, 4.6429e-5, 5.6633e-5,
25600 6.6305e-5, 7.6048e-5, 8.7398e-5, 1.0034e-4, 1.1169e-4, 1.2813e-4,
25601 1.3354e-4, 1.3952e-4, 1.4204e-4, 1.4615e-4, 1.5144e-4, 1.5475e-4,
25602 1.6561e-4, 1.7135e-4, 1.6831e-4, 1.6429e-4, 1.6353e-4, 1.6543e-4,
25603 1.5944e-4, 1.5404e-4, 1.5458e-4, 1.6287e-4, 1.7277e-4, 1.8387e-4,
25604 1.7622e-4, 1.636e-4, 1.5273e-4, 1.3667e-4, 1.2364e-4, 9.7576e-5,
25605 7.914e-5, 6.4241e-5, 5.1826e-5, 4.1415e-5, 3.1347e-5, 2.5125e-5,
25606 2.0027e-5, 1.6362e-5, 1.3364e-5, 1.1117e-5, 9.4992e-6, 8.1581e-6,
25607 7.1512e-6, 6.2692e-6, 5.5285e-6, 4.9e-6, 4.3447e-6, 3.8906e-6,
25608 3.4679e-6, 3.1089e-6, 2.8115e-6, 2.5496e-6, 2.2982e-6, 2.0861e-6,
25609 1.8763e-6, 1.7035e-6, 1.5548e-6, 1.4107e-6, 1.2839e-6, 1.1706e-6,
25610 1.0709e-6, 9.8099e-7, 8.9901e-7, 8.2394e-7, 7.5567e-7, 6.9434e-7,
25611 6.3867e-7, 5.8845e-7, 5.4263e-7, 5.0033e-7, 4.6181e-7, 4.2652e-7,
25612 3.9437e-7, 3.6497e-7, 3.3781e-7, 3.1292e-7, 2.9011e-7, 2.6915e-7,
25613 2.4989e-7, 2.3215e-7, 2.1582e-7, 2.0081e-7, 1.87e-7, 1.7432e-7,
25614 1.6264e-7, 1.5191e-7, 1.4207e-7, 1.3306e-7, 1.2484e-7, 1.1737e-7,
25615 1.1056e-7, 1.0451e-7, 9.906e-8, 9.4135e-8, 8.9608e-8, 8.5697e-8,
25616 8.1945e-8, 7.8308e-8, 7.4808e-8, 7.1686e-8, 6.8923e-8, 6.5869e-8,
25617 6.3308e-8, 6.084e-8, 5.8676e-8, 5.6744e-8, 5.5016e-8, 5.3813e-8,
25618 5.2792e-8, 5.2097e-8, 5.1737e-8, 5.1603e-8, 5.1656e-8, 5.1989e-8,
25619 5.2467e-8, 5.2918e-8, 5.3589e-8, 5.456e-8, 5.5869e-8, 5.7403e-8,
25620 5.8968e-8, 6.0973e-8, 6.3432e-8, 6.6245e-8, 6.9353e-8, 7.2686e-8,
25621 7.6541e-8, 8.0991e-8, 8.595e-8, 9.1429e-8, 9.7851e-8, 1.0516e-7,
25622 1.1349e-7, 1.2295e-7, 1.3335e-7, 1.4488e-7, 1.5864e-7, 1.7412e-7,
25623 1.914e-7, 2.1078e-7, 2.3369e-7, 2.5996e-7, 2.8848e-7, 3.2169e-7,
25624 3.5991e-7, 4.0566e-7, 4.5969e-7, 5.3094e-7, 6.1458e-7, 7.1155e-7,
25625 8.3045e-7, 9.9021e-7, 1.2042e-6, 1.4914e-6, 1.8145e-6, 2.221e-6,
25626 2.7831e-6, 3.4533e-6, 4.4446e-6, 5.1989e-6, 6.2289e-6, 7.1167e-6,
25627 8.3949e-6, 9.6417e-6, 1.0313e-5, 1.0485e-5, 1.0641e-5, 1.0898e-5,
25628 1.0763e-5, 1.0506e-5, 1.0497e-5, 1.1696e-5, 1.2654e-5, 1.3029e-5,
25629 1.3175e-5, 1.4264e-5, 1.4985e-5, 1.4999e-5, 1.4317e-5, 1.4616e-5,
25630 1.4963e-5, 1.5208e-5, 1.4942e-5, 1.3879e-5, 1.3087e-5, 1.1727e-5,
25631 1.0515e-5, 9.0073e-6, 7.3133e-6, 6.1181e-6, 5.0623e-6, 4.1105e-6,
25632 3.3915e-6, 2.6711e-6, 2.1464e-6, 1.7335e-6, 1.4302e-6, 1.1847e-6,
25633 9.9434e-7, 8.2689e-7, 7.0589e-7, 6.075e-7, 5.3176e-7, 4.6936e-7,
25634 4.1541e-7, 3.6625e-7, 3.2509e-7, 2.9156e-7, 2.6308e-7, 2.3819e-7,
25635 2.1421e-7, 1.9366e-7, 1.7626e-7, 1.5982e-7, 1.4567e-7, 1.3354e-7,
25636 1.2097e-7, 1.1029e-7, 1.0063e-7, 9.2003e-8, 8.4245e-8, 7.7004e-8,
25637 7.0636e-8, 6.4923e-8, 5.9503e-8, 5.4742e-8, 5.045e-8, 4.647e-8,
25638 4.2881e-8, 3.955e-8, 3.6541e-8, 3.3803e-8, 3.1279e-8, 2.8955e-8,
25639 2.6858e-8, 2.4905e-8, 2.3146e-8, 2.1539e-8, 2.0079e-8, 1.8746e-8,
25640 1.7517e-8, 1.6396e-8, 1.5369e-8, 1.4426e-8, 1.3543e-8, 1.2724e-8,
25641 1.1965e-8, 1.1267e-8, 1.0617e-8, 1.001e-8, 9.4662e-9, 8.9553e-9,
25642 8.4988e-9, 8.0807e-9, 7.7043e-9, 7.3721e-9, 7.0707e-9, 6.8047e-9,
25643 6.5702e-9, 6.3634e-9, 6.1817e-9, 6.0239e-9, 5.8922e-9, 5.7824e-9,
25644 5.7019e-9, 5.6368e-9, 5.594e-9, 5.5669e-9, 5.5583e-9, 5.5653e-9,
25645 5.5837e-9, 5.6243e-9, 5.6883e-9, 5.78e-9, 5.8964e-9, 6.0429e-9,
25646 6.2211e-9, 6.4282e-9, 6.6634e-9, 6.9306e-9, 7.2336e-9, 7.5739e-9,
25647 7.9562e-9, 8.3779e-9, 8.8575e-9, 9.3992e-9, 1.0004e-8, 1.0684e-8,
25648 1.145e-8, 1.232e-8, 1.3311e-8, 1.4455e-8, 1.5758e-8, 1.7254e-8,
25649 1.8927e-8, 2.093e-8, 2.3348e-8, 2.6074e-8, 2.9221e-8, 3.277e-8,
25650 3.7485e-8, 4.2569e-8, 4.8981e-8, 5.5606e-8, 6.2393e-8, 7.1901e-8,
25651 8.2921e-8, 9.5513e-8, 1.1111e-7, 1.3143e-7, 1.5971e-7, 1.8927e-7,
25652 2.2643e-7, 2.786e-7, 3.2591e-7, 3.7024e-7, 4.2059e-7, 4.9432e-7,
25653 5.5543e-7, 5.7498e-7, 5.921e-7, 6.1005e-7, 6.1577e-7, 5.9193e-7,
25654 5.6602e-7, 5.7403e-7, 6.005e-7, 6.4723e-7, 6.7073e-7, 7.5415e-7,
25655 8.0982e-7, 8.7658e-7, 9.143e-7, 9.4459e-7, 9.8347e-7, 9.8768e-7,
25656 1.0153e-6, 1.0066e-6, 1.0353e-6, 1.0353e-6, 1.0722e-6, 1.1138e-6,
25657 1.1923e-6, 1.2947e-6, 1.4431e-6, 1.6537e-6, 1.8662e-6, 2.2473e-6,
25658 2.6464e-6, 3.1041e-6, 3.4858e-6, 4.0167e-6, 4.6675e-6, 5.0983e-6,
25659 5.7997e-6, 6.0503e-6, 6.4687e-6, 6.5396e-6, 6.7986e-6, 7.0244e-6,
25660 7.2305e-6, 7.6732e-6, 7.9783e-6, 7.9846e-6, 7.7617e-6, 7.7657e-6,
25661 7.7411e-6, 7.8816e-6, 7.8136e-6, 8.0051e-6, 8.5799e-6, 9.1659e-6,
25662 9.8646e-6, 9.492e-6, 8.767e-6, 8.2034e-6, 7.2297e-6, 6.2324e-6,
25663 4.9315e-6, 3.9128e-6, 3.1517e-6, 2.4469e-6, 1.8815e-6, 1.4627e-6,
25664 1.1698e-6, 9.4686e-7, 7.8486e-7, 6.697e-7, 5.8811e-7, 5.2198e-7,
25665 4.6809e-7, 4.1671e-7, 3.7006e-7, 3.3066e-7, 2.9387e-7, 2.6415e-7,
25666 2.3409e-7, 2.0991e-7, 1.9132e-7, 1.7519e-7, 1.5939e-7, 1.4368e-7,
25667 1.305e-7, 1.1883e-7, 1.0772e-7, 9.6884e-8, 8.7888e-8, 7.8956e-8,
25668 7.1024e-8, 6.3824e-8, 5.7256e-8, 5.1769e-8, 4.7037e-8, 4.2901e-8,
25669 3.897e-8, 3.5467e-8, 3.2502e-8, 2.9827e-8, 2.7389e-8, 2.5111e-8,
25670 2.3056e-8, 2.1267e-8, 1.961e-8, 1.8133e-8, 1.6775e-8, 1.5491e-8,
25671 1.4329e-8, 1.3265e-8, 1.23e-8, 1.142e-8, 1.0593e-8, 9.8475e-9,
25672 9.1585e-9, 8.5256e-9, 7.9525e-9, 7.4226e-9, 6.9379e-9, 6.495e-9,
25673 6.0911e-9, 5.7242e-9, 5.3877e-9, 5.0821e-9, 4.8051e-9, 4.5554e-9,
25674 4.3315e-9, 4.1336e-9, 3.9632e-9, 3.8185e-9, 3.708e-9, 3.6296e-9,
25675 3.5804e-9, 3.5776e-9, 3.6253e-9, 3.7115e-9, 3.8151e-9, 3.9804e-9,
25676 4.1742e-9, 4.3581e-9, 4.5306e-9, 4.7736e-9, 5.1297e-9, 5.5291e-9,
25677 5.9125e-9, 6.4956e-9, 7.0362e-9, 7.5318e-9, 7.9947e-9, 8.6438e-9,
25678 9.7227e-9, 1.013e-8, 1.0549e-8, 1.1064e-8, 1.1702e-8, 1.2043e-8,
25679 1.1781e-8, 1.1838e-8, 1.1917e-8, 1.2131e-8, 1.2476e-8, 1.3611e-8,
25680 1.436e-8, 1.5057e-8, 1.6247e-8, 1.7284e-8, 1.842e-8, 1.8352e-8,
25681 1.8722e-8, 1.9112e-8, 1.9092e-8, 1.9311e-8, 1.9411e-8, 1.9884e-8,
25682 2.0508e-8, 2.151e-8, 2.3143e-8, 2.505e-8, 2.7596e-8, 3.1231e-8,
25683 3.626e-8, 4.341e-8, 5.224e-8, 6.3236e-8, 7.7522e-8, 9.8688e-8,
25684 1.1859e-7, 1.4341e-7, 1.6798e-7, 1.9825e-7, 2.2898e-7, 2.6257e-7,
25685 2.9884e-7, 3.3247e-7, 3.4936e-7, 3.5583e-7, 3.715e-7, 3.658e-7,
25686 3.7124e-7, 3.703e-7, 4.1536e-7, 4.6656e-7, 4.6677e-7, 4.7507e-7,
25687 4.9653e-7, 5.3795e-7, 5.4957e-7, 5.2238e-7, 5.469e-7, 5.6569e-7,
25688 5.9844e-7, 5.9835e-7, 5.6522e-7, 5.4123e-7, 4.7904e-7, 4.2851e-7,
25689 3.5603e-7, 2.8932e-7, 2.3655e-7, 1.8592e-7, 1.4943e-7, 1.1971e-7,
25690 9.8482e-8, 8.3675e-8, 7.127e-8, 6.2496e-8, 5.4999e-8, 4.9821e-8,
25691 4.5387e-8, 4.134e-8, 3.7453e-8, 3.3298e-8, 3.012e-8, 2.7032e-8,
25692 2.4236e-8, 2.15e-8, 1.8988e-8, 1.7414e-8, 1.5706e-8, 1.4192e-8,
25693 1.3204e-8, 1.1759e-8, 1.0737e-8, 9.6309e-9, 8.8179e-9, 8.2619e-9,
25694 7.2264e-9, 6.4856e-9, 5.8037e-9, 5.2093e-9, 4.7205e-9, 4.1749e-9,
25695 3.7852e-9, 3.3915e-9, 3.0089e-9, 2.7335e-9, 2.4398e-9, 2.2031e-9,
25696 1.9786e-9, 1.789e-9, 1.6266e-9, 1.483e-9, 1.3576e-9, 1.2518e-9,
25697 1.1587e-9, 1.0726e-9, 9.9106e-10, 9.1673e-10, 8.5084e-10,
25698 7.9147e-10, 7.2882e-10, 6.7342e-10, 6.2593e-10, 5.8294e-10,
25699 5.4435e-10, 5.0997e-10, 4.7806e-10, 4.4931e-10, 4.2357e-10,
25700 4.0023e-10, 3.7909e-10, 3.5999e-10, 3.4285e-10, 3.2776e-10,
25701 3.1468e-10, 3.0377e-10, 2.9479e-10, 2.8877e-10, 2.8512e-10,
25702 2.8617e-10, 2.8976e-10, 3.0001e-10, 3.1718e-10, 3.3898e-10,
25703 3.5857e-10, 3.8358e-10, 4.3131e-10, 4.5741e-10, 4.6948e-10,
25704 4.7594e-10, 4.9529e-10, 5.1563e-10, 4.9475e-10, 4.8369e-10,
25705 4.8829e-10, 5.0047e-10, 5.0203e-10, 5.1954e-10, 5.5352e-10,
25706 5.9928e-10, 6.7148e-10, 7.1121e-10, 7.4317e-10, 7.6039e-10,
25707 7.8313e-10, 8.0684e-10, 7.8553e-10, 7.8312e-10, 7.8537e-10,
25708 7.8872e-10, 8.0185e-10, 8.1004e-10, 8.2608e-10, 8.2525e-10,
25709 8.3857e-10, 8.792e-10, 9.2451e-10, 9.8661e-10, 1.0629e-9,
25710 1.1659e-9, 1.2922e-9, 1.4387e-9, 1.6254e-9, 1.8425e-9, 2.1428e-9,
25711 2.5477e-9, 3.0379e-9, 3.757e-9, 4.4354e-9, 5.1802e-9, 6.2769e-9,
25712 7.4894e-9, 8.7474e-9, 9.8037e-9, 1.1582e-8, 1.3293e-8, 1.4471e-8,
25713 1.5025e-8, 1.558e-8, 1.6228e-8, 1.6413e-8, 1.602e-8, 1.6393e-8,
25714 1.7545e-8, 1.959e-8, 2.1449e-8, 2.3856e-8, 2.705e-8, 3.0214e-8,
25715 3.3733e-8, 3.6487e-8, 3.9353e-8, 4.266e-8, 4.6385e-8, 4.9955e-8,
25716 5.5313e-8, 6.0923e-8, 6.8948e-8, 7.3649e-8, 8.2602e-8, 9.2212e-8,
25717 9.908e-8, 1.1319e-7, 1.179e-7, 1.2941e-7, 1.3199e-7, 1.3914e-7,
25718 1.4843e-7, 1.53e-7, 1.6419e-7, 1.7095e-7, 1.6988e-7, 1.6494e-7,
25719 1.6327e-7, 1.6067e-7, 1.6909e-7, 1.7118e-7, 1.8106e-7, 1.9857e-7,
25720 2.1696e-7, 2.3385e-7, 2.2776e-7, 2.1402e-7, 1.9882e-7, 1.7362e-7,
25721 1.4308e-7, 1.1158e-7, 8.8781e-8, 6.8689e-8, 5.2062e-8, 4.0427e-8,
25722 3.2669e-8, 2.7354e-8, 2.32e-8, 2.058e-8, 1.8676e-8, 1.7329e-8,
25723 1.6621e-8, 1.6433e-8, 1.6953e-8, 1.7134e-8, 1.7948e-8, 1.9107e-8,
25724 1.9875e-8, 2.1416e-8, 2.1556e-8, 2.2265e-8, 2.2171e-8, 2.2534e-8,
25725 2.3029e-8, 2.2828e-8, 2.3143e-8, 2.2965e-8, 2.2223e-8, 2.1108e-8,
25726 2.0265e-8, 1.9516e-8, 1.9941e-8, 2.0312e-8, 2.108e-8, 2.2611e-8,
25727 2.421e-8, 2.6069e-8, 2.5097e-8, 2.3318e-8, 2.1543e-8, 1.8942e-8,
25728 1.596e-8, 1.2386e-8, 9.934e-9, 7.7502e-9, 5.9462e-9, 4.5113e-9,
25729 3.5523e-9, 2.8844e-9, 2.3394e-9, 1.9584e-9, 1.6749e-9, 1.4624e-9,
25730 1.2809e-9, 1.1359e-9, 1.0087e-9, 9.0166e-10, 8.1079e-10,
25731 7.2219e-10, 6.4922e-10, 5.8803e-10, 5.329e-10, 4.859e-10,
25732 4.4111e-10, 4.0184e-10, 3.6644e-10, 3.3529e-10, 3.0789e-10,
25733 2.8286e-10, 2.6089e-10, 2.4125e-10, 2.2355e-10, 2.0783e-10,
25734 1.937e-10, 1.8088e-10, 1.6948e-10, 1.5929e-10, 1.5013e-10,
25735 1.4193e-10, 1.347e-10, 1.2841e-10, 1.2307e-10, 1.1865e-10,
25736 1.1502e-10, 1.1243e-10, 1.1099e-10, 1.1066e-10, 1.1216e-10,
25737 1.1529e-10, 1.2171e-10, 1.3128e-10, 1.4153e-10, 1.5962e-10,
25738 1.8048e-10, 2.0936e-10, 2.3165e-10, 2.5746e-10, 2.96e-10,
25739 3.3707e-10, 3.5267e-10, 3.5953e-10, 3.6822e-10, 3.8363e-10,
25740 3.8286e-10, 3.5883e-10, 3.6154e-10, 3.6653e-10, 3.8507e-10,
25741 4.025e-10, 4.4435e-10, 4.9889e-10, 5.6932e-10, 6.3599e-10,
25742 7.0281e-10, 7.5777e-10, 8.1279e-10, 8.891e-10, 9.34e-10,
25743 1.0076e-9, 1.0945e-9, 1.1898e-9, 1.3108e-9, 1.4725e-9, 1.7028e-9,
25744 1.9619e-9, 2.3527e-9, 2.6488e-9, 3.0327e-9, 3.4396e-9, 3.8797e-9,
25745 4.4115e-9, 4.6853e-9, 4.9553e-9, 4.9551e-9, 5.1062e-9, 5.0996e-9,
25746 5.1119e-9, 5.2283e-9, 5.8297e-9, 6.3439e-9, 6.2675e-9, 6.3296e-9,
25747 6.5173e-9, 7.1685e-9, 7.0528e-9, 6.8856e-9, 7.3182e-9, 7.699e-9,
25748 8.3461e-9, 8.1946e-9, 7.7153e-9, 7.2411e-9, 6.4511e-9, 5.7336e-9,
25749 4.6105e-9, 3.6962e-9, 2.9944e-9, 2.4317e-9, 1.9399e-9, 1.5331e-9,
25750 1.2633e-9, 1.0613e-9, 9.0136e-10, 7.9313e-10, 7.1543e-10,
25751 6.6485e-10, 6.4225e-10, 6.398e-10, 6.4598e-10, 6.7428e-10,
25752 7.027e-10, 7.4694e-10, 7.7946e-10, 7.9395e-10, 7.8716e-10,
25753 7.6933e-10, 7.622e-10, 7.4825e-10, 7.4805e-10, 7.6511e-10,
25754 7.6492e-10, 7.4103e-10, 7.1979e-10, 7.1686e-10, 7.3403e-10,
25755 7.1142e-10, 7.0212e-10, 7.1548e-10, 7.5253e-10, 8.0444e-10,
25756 8.2378e-10, 7.8004e-10, 7.1712e-10, 6.4978e-10, 5.7573e-10,
25757 4.8675e-10, 3.7945e-10, 3.0118e-10, 2.4241e-10, 1.91e-10,
25758 1.4816e-10, 1.1567e-10, 9.4183e-11, 7.766e-11, 6.527e-11,
25759 5.6616e-11, 4.9576e-11, 4.4137e-11, 3.9459e-11, 3.5759e-11,
25760 3.2478e-11, 2.9419e-11, 2.6703e-11, 2.4365e-11, 2.2412e-11,
25761 2.0606e-11, 1.9067e-11, 1.78e-11, 1.6695e-11, 1.5729e-11,
25762 1.4887e-11, 1.4135e-11, 1.3519e-11, 1.2992e-11, 1.2563e-11,
25763 1.2223e-11, 1.1962e-11, 1.1775e-11, 1.1657e-11, 1.1605e-11,
25764 1.1619e-11, 1.1697e-11, 1.1839e-11, 1.2046e-11, 1.2319e-11,
25765 1.2659e-11, 1.307e-11, 1.3553e-11, 1.4113e-11, 1.4754e-11,
25766 1.548e-11, 1.6298e-11, 1.7214e-11, 1.8236e-11, 1.9372e-11,
25767 2.0635e-11, 2.2036e-11, 2.359e-11, 2.5317e-11, 2.7242e-11,
25768 2.94e-11, 3.1849e-11, 3.4654e-11, 3.7923e-11, 4.1695e-11,
25769 4.6055e-11, 5.094e-11, 5.5624e-11, 6.0667e-11, 6.6261e-11,
25770 7.2692e-11, 7.9711e-11, 8.7976e-11, 9.6884e-11, 1.0775e-10,
25771 1.2093e-10, 1.3531e-10, 1.5404e-10, 1.7315e-10, 1.9862e-10,
25772 2.3341e-10, 2.7014e-10, 3.1716e-10, 3.6957e-10, 4.3233e-10,
25773 5.2566e-10, 6.2251e-10, 7.2149e-10, 8.3958e-10, 9.5931e-10,
25774 1.1388e-9, 1.2973e-9, 1.4442e-9, 1.5638e-9, 1.6974e-9, 1.8489e-9,
25775 1.983e-9, 2.172e-9, 2.3662e-9, 2.6987e-9, 3.1697e-9, 3.6907e-9,
25776 4.2625e-9, 4.7946e-9, 5.3848e-9, 6.0897e-9, 6.473e-9, 7.1483e-9,
25777 7.7432e-9, 8.0851e-9, 8.5013e-9, 8.5909e-9, 9.189e-9, 9.3124e-9,
25778 9.5936e-9, 9.8787e-9, 9.9036e-9, 9.6712e-9, 9.2036e-9, 9.0466e-9,
25779 8.938e-9, 9.1815e-9, 9.5092e-9, 1.0027e-8, 1.0876e-8, 1.1744e-8,
25780 1.1853e-8, 1.1296e-8, 1.0134e-8, 8.8245e-9, 7.393e-9, 5.715e-9,
25781 4.4884e-9, 3.4027e-9, 2.6054e-9, 2.079e-9, 1.7267e-9, 1.4724e-9,
25782 1.2722e-9, 1.1234e-9, 1.0186e-9, 9.468e-10, 8.8854e-10,
25783 8.5127e-10, 8.3157e-10, 8.2226e-10, 8.3395e-10, 8.3294e-10,
25784 8.4725e-10, 8.8814e-10, 9.3697e-10, 1.0112e-9, 1.0412e-9,
25785 1.0948e-9, 1.181e-9, 1.2267e-9, 1.369e-9, 1.4512e-9, 1.5568e-9,
25786 1.6552e-9, 1.7321e-9, 1.8797e-9, 1.921e-9, 1.9686e-9, 1.9917e-9,
25787 1.9357e-9, 1.8486e-9, 1.7575e-9, 1.7113e-9, 1.7163e-9, 1.7623e-9,
25788 1.8536e-9, 1.9765e-9, 2.1334e-9, 2.3237e-9, 2.3259e-9, 2.1833e-9,
25789 1.9785e-9, 1.7308e-9, 1.4596e-9, 1.1198e-9, 8.7375e-10,
25790 6.5381e-10, 4.8677e-10, 3.6756e-10, 2.9155e-10, 2.3735e-10,
25791 1.959e-10, 1.6638e-10, 1.4549e-10, 1.2947e-10, 1.1511e-10,
25792 1.0548e-10, 9.6511e-11, 9.0469e-11, 8.517e-11, 7.7804e-11,
25793 7.1971e-11, 6.6213e-11, 6.1063e-11, 5.5881e-11, 5.0508e-11,
25794 4.5932e-11, 4.1997e-11, 3.7672e-11, 3.3972e-11, 3.0318e-11,
25795 2.6769e-11, 2.3874e-11, 2.1336e-11, 1.9073e-11, 1.7313e-11,
25796 1.5904e-11, 1.4684e-11, 1.3698e-11, 1.2873e-11, 1.2175e-11,
25797 1.1542e-11, 1.1024e-11, 1.0602e-11, 1.0267e-11, 1.0012e-11,
25798 9.8379e-12, 9.7482e-12, 9.7564e-12, 9.8613e-12, 1.0092e-11,
25799 1.0418e-11, 1.0868e-11, 1.1585e-11, 1.2351e-11, 1.3372e-11,
25800 1.4841e-11, 1.6457e-11, 1.8681e-11, 2.055e-11, 2.2912e-11,
25801 2.5958e-11, 2.9137e-11, 3.2368e-11, 3.4848e-11, 3.8462e-11,
25802 4.219e-11, 4.5629e-11, 4.9022e-11, 5.4232e-11, 6.19e-11,
25803 7.1953e-11, 8.5368e-11, 9.9699e-11, 1.1734e-10, 1.4185e-10,
25804 1.7017e-10, 1.9813e-10, 2.3859e-10, 2.7304e-10, 3.0971e-10,
25805 3.5129e-10, 3.9405e-10, 4.5194e-10, 4.8932e-10, 5.2436e-10,
25806 5.4098e-10, 5.5542e-10, 5.7794e-10, 5.6992e-10, 5.879e-10,
25807 6.1526e-10, 6.8034e-10, 6.7956e-10, 6.6864e-10, 6.9329e-10,
25808 7.2971e-10, 7.6546e-10, 7.5078e-10, 7.8406e-10, 8.3896e-10,
25809 9.0111e-10, 9.1994e-10, 8.7189e-10, 8.1426e-10, 7.3097e-10,
25810 6.3357e-10, 5.1371e-10, 4.0936e-10, 3.2918e-10, 2.6255e-10,
25811 2.0724e-10, 1.6879e-10, 1.4165e-10, 1.1989e-10, 1.0125e-10,
25812 8.9629e-11, 7.8458e-11, 6.8826e-11, 6.0935e-11, 5.5208e-11,
25813 5.2262e-11, 5.026e-11, 4.8457e-11, 4.7888e-11, 4.8032e-11,
25814 5.0838e-11, 5.4668e-11, 5.579e-11, 6.0056e-11, 6.3811e-11,
25815 6.8848e-11, 7.459e-11, 7.8249e-11, 8.3371e-11, 8.3641e-11,
25816 8.6591e-11, 8.9599e-11, 9.3487e-11, 1.0066e-10, 1.0765e-10,
25817 1.0851e-10, 1.0619e-10, 1.0557e-10, 1.046e-10, 1.0796e-10,
25818 1.0523e-10, 1.0674e-10, 1.1261e-10, 1.1431e-10, 1.1408e-10,
25819 1.0901e-10, 9.9105e-11, 8.8077e-11, 6.9928e-11, 5.4595e-11,
25820 4.5401e-11, 3.6313e-11, 2.6986e-11, 1.9463e-11, 1.4577e-11,
25821 1.1583e-11, 9.5492e-12, 8.077e-12, 6.9642e-12, 6.0966e-12,
25822 5.4046e-12, 4.8431e-12, 4.3815e-12, 3.9987e-12, 3.679e-12,
25823 3.4113e-12, 3.1868e-12, 2.9992e-12, 2.8434e-12, 2.7153e-12,
25824 2.612e-12, 2.5311e-12, 2.4705e-12, 2.429e-12, 2.4053e-12,
25825 2.3988e-12, 2.4087e-12, 2.4349e-12, 2.4771e-12, 2.5355e-12,
25826 2.6103e-12, 2.7019e-12, 2.811e-12, 2.9383e-12, 3.0848e-12,
25827 3.2518e-12, 3.4405e-12, 3.6527e-12, 3.8902e-12, 4.1555e-12,
25828 4.451e-12, 4.7801e-12, 5.1462e-12, 5.5539e-12, 6.0086e-12,
25829 6.5171e-12, 7.0884e-12, 7.7357e-12, 8.4831e-12, 9.3096e-12,
25830 1.0282e-11, 1.1407e-11, 1.269e-11, 1.4148e-11, 1.5888e-11,
25831 1.7992e-11, 2.0523e-11, 2.3342e-11, 2.6578e-11, 3.0909e-11,
25832 3.6228e-11, 4.2053e-11, 4.9059e-11, 5.9273e-11, 7.0166e-11,
25833 8.2298e-11, 9.7071e-11, 1.1673e-10, 1.401e-10, 1.6621e-10,
25834 2.0127e-10, 2.3586e-10, 2.705e-10, 3.095e-10, 3.6584e-10,
25835 4.1278e-10, 4.6591e-10, 5.222e-10, 5.5246e-10, 6.15e-10,
25836 6.5878e-10, 7.1167e-10, 7.9372e-10, 8.6975e-10, 9.6459e-10,
25837 9.7368e-10, 9.8142e-10, 1.0202e-9, 1.02e-9, 1.0356e-9, 1.0092e-9,
25838 1.0269e-9, 1.0366e-9, 1.049e-9, 1.0717e-9, 1.0792e-9, 1.1016e-9,
25839 1.0849e-9, 1.0929e-9, 1.0971e-9, 1.0969e-9, 1.046e-9, 9.2026e-10,
25840 8.1113e-10, 6.8635e-10, 5.5369e-10, 4.2908e-10, 3.3384e-10,
25841 2.648e-10, 2.081e-10, 1.6915e-10, 1.4051e-10, 1.1867e-10,
25842 1.0158e-10, 8.899e-11, 7.9175e-11, 7.044e-11, 6.3453e-11,
25843 5.7009e-11, 5.1662e-11, 4.7219e-11, 4.3454e-11, 4.0229e-11,
25844 3.7689e-11, 3.6567e-11, 3.5865e-11, 3.5955e-11, 3.5928e-11,
25845 3.6298e-11, 3.7629e-11, 3.93e-11, 4.1829e-11, 4.4806e-11,
25846 5.0534e-11, 5.6672e-11, 6.2138e-11, 6.8678e-11, 7.6111e-11,
25847 8.4591e-11, 9.2634e-11, 9.8085e-11, 1.083e-10, 1.1949e-10,
25848 1.2511e-10, 1.3394e-10, 1.3505e-10, 1.4342e-10, 1.4874e-10,
25849 1.492e-10, 1.5872e-10, 1.5972e-10, 1.5821e-10, 1.5425e-10,
25850 1.4937e-10, 1.5089e-10, 1.5521e-10, 1.6325e-10, 1.6924e-10,
25851 1.8265e-10, 1.9612e-10, 2.0176e-10, 1.9359e-10, 1.7085e-10,
25852 1.5197e-10, 1.2646e-10, 9.8552e-11, 7.453e-11, 5.5052e-11,
25853 4.2315e-11, 3.2736e-11, 2.6171e-11, 2.1909e-11, 1.8286e-11,
25854 1.5752e-11, 1.3859e-11, 1.2288e-11, 1.1002e-11, 9.7534e-12,
25855 8.8412e-12, 8.0169e-12, 7.2855e-12, 6.8734e-12, 6.4121e-12,
25856 6.1471e-12, 5.778e-12, 5.3478e-12, 4.9652e-12, 4.4043e-12,
25857 3.9862e-12, 3.4684e-12, 2.9681e-12, 2.5791e-12, 2.2339e-12,
25858 1.9247e-12, 1.6849e-12, 1.4863e-12, 1.3291e-12, 1.2021e-12,
25859 1.0947e-12, 1.0015e-12, 9.1935e-13, 8.4612e-13, 7.8036e-13,
25860 7.21e-13, 6.6718e-13, 6.1821e-13, 5.7353e-13, 5.3269e-13,
25861 4.9526e-13, 4.6093e-13, 4.2937e-13, 4.0034e-13, 3.7361e-13,
25862 3.4895e-13, 3.2621e-13, 3.052e-13, 2.8578e-13, 2.6782e-13,
25863 2.512e-13, 2.3581e-13, 2.2154e-13, 2.0832e-13, 1.9605e-13,
25864 1.8466e-13, 1.7408e-13, 1.6425e-13, 1.5511e-13, 1.4661e-13,
25865 1.3869e-13, 1.3131e-13, 1.2444e-13, 1.1803e-13, 1.1205e-13,
25866 1.0646e-13, 1.0124e-13, 9.6358e-14, 9.1789e-14, 8.7509e-14,
25867 8.3498e-14, 7.9735e-14, 7.6202e-14, 7.2882e-14, 6.976e-14,
25868 6.6822e-14, 6.4053e-14, 6.1442e-14, 5.8978e-14, 5.665e-14,
25869 5.4448e-14, 5.2364e-14, 5.0389e-14, 4.8516e-14, 4.6738e-14,
25870 4.5048e-14, 4.3441e-14, 4.1911e-14, 4.0453e-14, 3.9063e-14,
25871 3.7735e-14, 3.6467e-14, 3.5254e-14, 3.4093e-14, 3.298e-14,
25872 3.1914e-14, 3.0891e-14, 2.9909e-14, 2.8965e-14, 2.8058e-14,
25873 2.7185e-14, 2.6344e-14, 2.5535e-14, 2.4755e-14, 2.4002e-14,
25874 2.3276e-14, 2.2576e-14, 2.1899e-14, 2.1245e-14, 2.0613e-14,
25875 2.0002e-14, 1.9411e-14, 1.8839e-14, 1.8285e-14, 1.7749e-14,
25876 1.723e-14, 1.6727e-14, 1.624e-14, 1.5768e-14, 1.531e-14,
25877 1.4867e-14, 1.4436e-14, 1.4019e-14, 1.3614e-14, 1.3221e-14,
25878 1.284e-14, 1.2471e-14, 1.2112e-14, 1.1764e-14, 1.1425e-14,
25879 1.1097e-14, 1.0779e-14, 1.0469e-14, 1.0169e-14, 9.8775e-15,
25880 9.5943e-15, 9.3193e-15, 9.0522e-15, 8.7928e-15, 8.5409e-15,
25881 8.2962e-15, 8.0586e-15, 7.8278e-15, 7.6036e-15, 7.3858e-15,
25882 7.1742e-15, 6.9687e-15, 6.7691e-15, 6.5752e-15, 6.3868e-15,
25883 6.2038e-15, 6.026e-15, 5.8533e-15, 5.6856e-15, 5.5226e-15,
25884 5.3642e-15, 5.2104e-15, 5.061e-15, 4.9158e-15, 4.7748e-15,
25885 4.6378e-15, 4.5047e-15, 4.3753e-15, 4.2497e-15, 4.1277e-15,
25886 4.0091e-15, 3.8939e-15, 3.782e-15, 3.6733e-15, 3.5677e-15,
25887 3.4651e-15, 3.3655e-15, 3.2686e-15, 3.1746e-15, 3.0832e-15,
25888 2.9944e-15, 2.9082e-15, 2.8244e-15, 2.7431e-15, 2.664e-15,
25889 2.5872e-15, 2.5126e-15, 2.4401e-15, 2.3697e-15, 2.3014e-15,
25890 2.2349e-15, 2.1704e-15, 2.1077e-15, 2.0468e-15, 1.9877e-15,
25891 1.9302e-15, 1.8744e-15, 1.8202e-15, 1.7675e-15, 1.7164e-15,
25892 1.6667e-15, 1.6184e-15, 1.5716e-15, 1.526e-15, 1.4818e-15,
25893 1.4389e-15, 1.3971e-15, 1.3566e-15, 1.3172e-15, 1.279e-15,
25894 1.2419e-15, 1.2058e-15, 1.1708e-15, 1.1368e-15, 1.1037e-15,
25895 1.0716e-15, 1.0405e-15, 1.0102e-15, 9.8079e-16, 9.5224e-16,
25896 9.2451e-16, 8.9758e-16, 8.7142e-16, 8.4602e-16, 8.2136e-16,
25897 7.974e-16, 7.7414e-16, 7.5154e-16, 7.2961e-16, 7.083e-16,
25898 6.8761e-16, 6.6752e-16, 6.4801e-16, 6.2906e-16, 6.1066e-16,
25899 5.928e-16, 5.7545e-16, 5.586e-16, 5.4224e-16, 5.2636e-16,
25900 5.1094e-16, 4.9596e-16} };
25901
25902struct s_s260b_ {
25903 double e_1[3];
25904 int e_2;
25905 } s260b_ = { {-20., 2e4, 10.}, 2003 };
25906
25907struct s_consts_ {
25908 double e_1[9];
25909 } consts_ = { {3.1415927410125732, 6.62606876e-27, 1.3806503e-16,
25910 29979245800., 6.02214199e23, 2.6867775e19, 83144720.,
25911 1.191042722e-12, 1.4387752} };
25912
25913
25914/* Table of constant values */
25915
25916/*
25917static integer c__9 = 9;
25918static integer c__1 = 1;
25919static integer c__2 = 2;
25920static integer c__5 = 5;
25921static int cs__0 = 0;
25922*/
25923// FIXME static double c_b125 = 0.;
25924
25925/* ############################################################################ */
25926/* path: $Source: /srv/svn/cvs/cvsroot/arts/src/continua.cc,v $ */
25927/* author: $Author $ */
25928/* revision: $Revision: 1.39 $ */
25929/* created: $Date: 2006/06/30 08:35:33 $ */
25930/* ############################################################################ */
25931
25932/* CKD2.4 TEST */
25933/* TKS, 2002-02-28 */
25934/* CALL : g77 -c testckd.f ; g77 testckd.o -o testckd */
25935
25936/* ############################################################################ */
25937/* ----------------------------------------------------------------------------- */
25938
25939/* INPUT PARAMETERS: */
25940/* P [hPa] TOTAL PRESSURE */
25941/* T [K] TEMPERATURE */
25942/* VMRH2O [1] H2O VOLUME MIXING RATIO */
25943/* VMRN2 [1] N2 VOLUME MIXING RATIO */
25944/* VMRO2 [1] O2 VOLUME MIXING RATIO */
25945/* FREQ [Hz] FREQUENCY OF ABSORPTION CALCULATION */
25946
25947
25948/* OUTPUT PARAMETER: */
25949/* artsckd_ [1/m] ABSORPTION COEFFICIENT */
25950
25951/* ----------------------------------------------------------------------------- */
25952
25953double artsckd_(double p, double t, double vmrh2o,
25954 double vmrn2, double vmro2, double freq, int ivc)
25955{
25956 /* Initialized data */
25957
25958 static double xslf = 1.;
25959 static double xfrg = 1.;
25960 static double xcn2 = 1.;
25961
25962 /* System generated locals */
25963 double ret_val=0.0e0;
25964 // FIXME double d__1, d__2, d__3, d__4;
25965
25966 /* Local variables */
25967 // FIXME int iosa;
25968 double w_wv__, oc_n2, radct;
25969 double w_other__, w_n2__, w_o2__;
25970 double of_wv, os_wv, p0, xn_wv__, t0, rhofac, wn, xn, xn0, tksvpt, rft;
25971
25972 extern int initi_(double, double , double *,
25973 double *, double *, double *, double *,
25974 double *, double *, double *, double *,
25975 double *, double *);
25976 extern double fwv_(int , double , double *, double *,
25977 double *, double *, double *, double *);
25978 extern double swv_(int , double , double , double *, double *
25979 , double *, double *, double *, double *,
25980 double *);
25981 extern double conti_n2__(double , double , double *,
25982 double *, double *, double *, double *);
25983
25984
25985/* PROGRAM: MODM */
25986/* ------- */
25987
25988/* AUTHOR: Sid-Ahmed Boukabara */
25989/* ------ */
25990
25991/* AFFILIATION: ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC. */
25992/* ----------- */
25993
25994/* DATE OF CREATION : October 1998 */
25995/* ---------------- */
25996
25997/* AIM: This program is aimed at the calculation of the */
25998/* --- atmospheric optical depths. The spectral validity depends */
25999/* only on the region covered by the file:"spectral_lines.dat" */
26000/* The components treated here are the water vapor, the */
26001/* oxygen, the ozone, the nitrogen and nitrogen dioxide. */
26002
26003/* - IVC : Flag of contin. vers.: CKD2.4(if=2) MPMf87/s93 (if=3) */
26004/* - ICP : Flag to take(if =1) or not (if=0) the line coupling */
26005/* - NWN : Number of wavenumbers to be treated */
26006/* - WN : Vector of NWN wavenumbers [in cm-1], one should note that */
26007/* this input could be a scalar (associated with NWN=1) */
26008/* - NLAY : Number of layers to be treated. */
26009/* - P : Vector of NLAY pressures (in mbar), one should note that */
26010/* this input could be a scalar (associated with NLAY=1) */
26011/* - T : Vector of NLAY temperatures [in Kelvin] */
26012/* - W_WV : Vector of NLAY water vapor column amounts [in molecules/cm2] */
26013/* - W_O2 : Vector of NLAY oxygen column amounts [in molecules/cm2] */
26014/* - W_N2 : Vector of NLAY nitrogen column amounts [in molecules/cm2] */
26015/* - W_OTHER : Vector of NLAY of other species column amounts [in molecules/cm2] */
26016/* - CLW : Vector of NLAY Cloud Liquid Water amounts [in kg/m2 or mm] */
26017/* When Cloud is present, the frequency must be consistent */
26018/* with Rayleigh absorption (no scattering performed in */
26019/* monortm). */
26020/* - XSLF : Scaling factor of the self WV continuum (usually XSLF=1) */
26021/* - XFRG : Scaling factor of the foreign WV continuum (usually XFRG=1) */
26022/* - XCN2 : Scaling factor of the N2 continuum (usually XCN2=1) */
26023/* - O : An array of NWNxNLAY elts containing the total optical depths */
26024/* due to all the active species [in nepers] */
26025/* - OS_WV : An array of NWNxNLAY elts containing the water vapor optical */
26026/* depth (due to self continuum), [in Nepers] */
26027/* - OF_WV : An array of NWNxNLAY elts containing the water vapor optical */
26028/* depth (due to foreign continuum), [in Nepers] */
26029/* - OC_N2 : An array of NWNxNLAY elts containing the nitrogen optical */
26030/* depth (due to continuum), [in Nepers] */
26031/* - O_CLW : An array of NWNxNLAY elts containing the CLW optical */
26032/* depth , [in Nepers] */
26033
26034/* History of the modifications: */
26035/* ***************************** */
26036/* - written in 1999 by Sid Ahmed Boukabara, Ross Hoffman */
26037/* and Tony Clough. */
26038/* - validated against ARM sondes in the */
26039/* microwave spectrum (23.8 and 31.4 GHz). SAB, 2000. */
26040/* - extended to more species by Sid Ahmed Boukabara in 03/2000. */
26041/* - cleaned up and commented in 2001 for first public release. */
26042/* Also put under CVS configuration management. SAB. */
26043/* - Extended O2 lines to submillimeter. Extensive validation */
26044/* by comparison to Rosenkranz model and MWR data. */
26045/* Update of the LBLATM module (accepts inputs at pressure */
26046/* grid, along with altitude grid). */
26047/* Fixed the handling of N2 amount coming from LBLATM (which */
26048/* depends on the number of molecules NMOL). */
26049/* Adopted accurate constants values. */
26050/* Sid Ahmed Boukabara. Dec 14th 2001. */
26051/* - Updated on January 7th 2002. ARM option (INP=2) updated and */
26052/* made more efficient after Jim's comments. (INP=3) option optimized. */
26053/* WV line intensities modified in the microwave (see Tony's email). */
26054
26055/* Comments should be forwarded to Sid Ahmed Boukabara (sboukaba@aer.com) */
26056/* or Tony Clough (clough@aer.com). */
26057
26058/* ============================================================================ */
26059
26060
26061/* TKS functions: */
26062
26063/* scaling factor (SLF cont) */
26064/* scaling factor (FRG cont) */
26065/* scaling factor (N2 cont) */
26066
26067
26068 w_wv__ = 0.0e0;
26069 w_o2__ = 0.0e0;
26070 w_n2__ = 0.0e0;
26071 w_other__ = 0.0e0;
26072 ret_val = 0.0e0;
26073 rft = 0.0e0;
26074 //os_wv = 0.0e0;
26075 //of_wv = 0.0e0;
26076 //oc_n2 = 0.0e0;
26077
26078/* ---INPUTS & GENERAL CONTROL PARAMETERS */
26079
26080 /* set H2O, O2 and N2 number density to column amount [molec/cm2] */
26081 /* TKSVPT = P[Pa] / T[K] */
26082 tksvpt = (p * 100.0) / t;
26083 /* 7.242923e16 = k_B [J/K] * 1.0e-6 [m^3/cm^3] */
26084 w_wv__ = vmrh2o * 7.242923e16 * tksvpt;
26085 w_o2__ = vmro2 * 7.242923e16 * tksvpt;
26086 w_n2__ = vmrn2 * 7.242923e16 * tksvpt;
26087 w_other__ = (1.0000E0-vmrh2o-vmro2-vmrn2) * 7.242923e16 * tksvpt;
26088
26089 /* frequency [Hz] to wave number [cm-1] */
26090 wn = freq / 29979245800.0;
26091 //cout << "CKD2.4 H2O column amounts [molec/cm2] =" << w_wv__ << "\n";
26092 //cout << "CKD2.4 O2 column amounts [molec/cm2] =" << w_o2__ << "\n";
26093 //cout << "CKD2.4 H2O column amounts [molec/cm2] =" << w_n2__ << "\n";
26094 //cout << "CKD2.4 others column amounts [molec/cm2] =" << w_other__ << "\n";
26095 //cout << "freq=" << freq << " Hz, wave num=" << wn << " cm-1\n";
26096
26097/* ---------------------------------------------------------------------------- */
26098
26099/* --- INITIALIZATION ----------------------------------------- */
26100 initi_(p, t, &radct, &t0, &p0, &w_wv__, &w_o2__, &w_n2__, &w_other__, &
26101 xn0, &xn, &xn_wv__, &rhofac);
26102 //cout << "CKD2.4 t0=" << t0 << " p0=" << p0 << "\n";
26103 //cout << "radct =" << radct << "\n";
26104 //cout << "xn0 =" << xn0 << "\n";
26105 //cout << "xn =" << xn << "\n";
26106 //cout << "xn_wv__ =" << xn_wv__ << "\n";
26107 //cout << "rhofac =" << rhofac << "\n";
26108
26109 /* --- RAD_FIELD_TERM ----------------------------------------- */
26110 rft = wn * tanh(radct * wn / (t * 2));
26111 //cout << "rft =" << rft << "\n";
26112
26113 /* --- H2O CONTINUUM TERM ------------------------------------- */
26114
26115 if (ivc == 21) {
26116 /* CKD2.4 CONT_SELF_WV [Np/m] */
26117 os_wv = 1.0000e2 * swv_(2, wn, t, &t0, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xslf);
26118 //cout << "CKD2.4 ivc=21, H2O self cont [in Np/m] =" << os_wv << "\n";
26119 return os_wv;
26120 }
26121 if (ivc == 31) {
26122 /* MPMf87/s93 CONT_SELF_WV [Np/m] */
26123 os_wv = 1.0000e2 * swv_(3, wn, t, &t0, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xslf);
26124 //cout << "CKD2.4 ivc=31, H2O self cont [in Np/m] =" << os_wv << "\n";
26125 return os_wv;
26126 }
26127 if (ivc == 22) {
26128 /* CKD2.4 CONT_FRGN_WV [Np/m] */
26129 of_wv = 1.0000e2 * fwv_(2, wn, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xfrg);
26130 //cout << "CKD2.4 ivc=22, H2O foreign cont [in Np/m] =" << of_wv << "\n";
26131 return of_wv;
26132 }
26133 if (ivc == 32) {
26134 /* MPMf87/s93 CONT_FRGN_WV [Np/m] */
26135 of_wv = 1.0000e2 * fwv_(3, wn, &w_wv__, &rft, &xn, &xn_wv__, &xn0, &xfrg);
26136 //cout << "CKD2.4 ivc=32, H2O foreign cont [in Np/m] =" << of_wv << "\n";
26137 return of_wv ;
26138 }
26139
26140 /* --- N2 CONTINUUM TERM [Np/m] ----------------------------------- */
26141 if (ivc == 1) {
26142 oc_n2 = 1.0000e2 * conti_n2__(wn, t, &t0, &w_n2__, &rft, &rhofac, &xcn2);
26143 //cout << "CKD2.4 ivc=1, N2 cont [in Np/m] =" << oc_n2 << "\n";
26144 return oc_n2;
26145 }
26146
26147 /* --- TOTAL ABSORPTION IN [in Np/m] --------------------------- */
26148 // cout << "CKD2.4 H2O s+f cont [in Np/m] =" << ((os_wv+of_wv) * 1.0000e2) << "\n";
26149 //ret_val = ((os_wv + of_wv + oc_n2) * 1.0000e2);
26150
26151// FIXME L999:
26152
26153 return ret_val; // [Np/m]
26154} /* artsckd_ */
26155
26156
26157/* ############################################################################ */
26158/* foreign continuum functions -------------------------------------------- */
26159double fwv_(int ivc, double wn, double *w_wv__, double *rft,
26160 double *xn, double *xn_wv__, double *xn0, double *xfrg)
26161{
26162 /* System generated locals */
26163 double ret_val = 0.0e0;
26164
26165 /* Local variables */
26166 extern double fwv24_(double , double *, double *,
26167 double *, double *, double *, double *),
26168 fwv_mpmf87s93__(double , double *, double *,
26169 double *, double *, double *, double *);
26170
26171 ret_val = 0.0e0;
26172
26173/* --- CKD2.4 CONTINUUM ------------------------------------- */
26174 if (ivc == 2 && *w_wv__ > 0.) {
26175 ret_val = fwv24_(wn, w_wv__, rft, xn, xn_wv__, xn0, xfrg);
26176 }
26177
26178
26179/* --- MPMf87s93 CONTINUUM ---------------------------------- */
26180 if (ivc == 3 && *w_wv__ > 0.) {
26181 ret_val = fwv_mpmf87s93__(wn, w_wv__, rft, xn, xn_wv__, xn0, xfrg);
26182 }
26183
26184 return ret_val;
26185} /* fwv_ */
26186
26187double fwv_mpmf87s93__(double wn, double *w_wv__, double *rft,
26188 double *xn, double *xn_wv__, double *xn0, double *xfrg)
26189{
26190 /* System generated locals */
26191 double ret_val=0.0e0;
26192
26193 /* Local variables */
26194 extern double xlgr_(double *, double *);
26195 int i__, j;
26196 double x[4], fscal, xf;
26197
26198 j = (int) ((wn - fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).v1) / fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).dv) + 1;
26199
26200 for (i__ = 1; i__ <= 4; ++i__) {
26201 x[i__ - 1] = fh2oa_1(*(struct fh2oa_1_ *) &fh2oa_).fh2o[j + i__ - 3];
26202 }
26203
26204 xf = (wn - (fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).v1 + fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).dv * (double) (j - 1))) /
26205 fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).dv;
26206 fscal = .8;
26207 ret_val = xlgr_(&xf, x) * 1e-20 * (*w_wv__ * *rft * ((*xn - *xn_wv__) / *
26208 xn0)) * fscal * *xfrg;
26209
26210/* L999: */
26211 return ret_val;
26212} /* fwv_mpmf87s93__ */
26213
26214double fwv24_(double wn, double *w_wv__, double *rft,
26215 double *xn, double *xn_wv__, double *xn0, double *
26216 xfrg)
26217{
26218 /* Initialized data */
26219
26220 static double v0f1 = 350.;
26221 static double hwsqf1 = 4e4;
26222 static double betaf1 = 5e-9;
26223 static double factrf1 = -.7;
26224 static double v0f1a = 630.;
26225 static double hwsqf1a = 4225.;
26226 static double betaf1a = 2e-8;
26227 static double factrf1a = .75;
26228 static double v0f2 = 1130.;
26229 static double hwsqf2 = 108900.;
26230 static double betaf2 = 8e-11;
26231 static double factrf2 = -.97;
26232 static double v0f3 = 1975.;
26233 static double hwsqf3 = 62500.;
26234 static double betaf3 = 5e-6;
26235 static double factrf3 = -.65;
26236
26237 /* System generated locals */
26238 double ret_val=0.0e0;
26239 double d__1;
26240
26241 /* Local variables */
26242 extern double xlgr_(double *, double *);
26243 int i__, j;
26244 double x[4], fscal, xf, vf2, vf4, vf6;
26245
26246 j = (int) ((wn - fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).v1) / fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).dv) + 1;
26247 for (i__ = 1; i__ <= 4; ++i__) {
26248 x[i__ - 1] = fh2oa_1(*(struct fh2oa_1_ *) &fh2oa_).fh2o[j + i__ - 3];
26249 }
26250
26251 xf = (wn - (fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).v1 + fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).dv * (double) (j - 1))) /
26252 fh2ob_1(*(struct fh2ob_1_ *) &fh2ob_).dv;
26253
26254/* ---added correction to the forgn continuum */
26255/* Computing 2nd power */
26256 d__1 = wn - v0f1;
26257 vf2 = d__1 * d__1;
26258 vf6 = vf2 * vf2 * vf2;
26259 fscal = factrf1 * (hwsqf1 / (vf2 + betaf1 * vf6 + hwsqf1)) + 1.;
26260/* Computing 2nd power */
26261 d__1 = wn - v0f1a;
26262 vf2 = d__1 * d__1;
26263 vf6 = vf2 * vf2 * vf2;
26264 fscal *= factrf1a * (hwsqf1a / (vf2 + betaf1a * vf6 + hwsqf1a)) + 1.;
26265/* Computing 2nd power */
26266 d__1 = wn - v0f2;
26267 vf2 = d__1 * d__1;
26268 vf6 = vf2 * vf2 * vf2;
26269 fscal *= factrf2 * (hwsqf2 / (vf2 + betaf2 * vf6 + hwsqf2)) + 1.;
26270/* Computing 2nd power */
26271 d__1 = wn - v0f3;
26272 vf2 = d__1 * d__1;
26273 vf4 = vf2 * vf2;
26274 fscal *= factrf3 * (hwsqf3 / (vf2 + betaf3 * vf4 + hwsqf3)) + 1.;
26275 ret_val = xlgr_(&xf, x) * 1e-20 * (*w_wv__ * *rft * ((*xn - *xn_wv__) / *
26276 xn0)) * fscal * *xfrg;
26277
26278/* L999: */
26279 return ret_val;
26280} /* fwv24_ */
26281
26282
26283
26284/* self continuum function ------------------------------------------------ */
26285double swv_(int ivc, double wn, double t, double *t0,
26286 double *w_wv__, double *rft, double *xn, double *
26287 xn_wv__, double *xn0, double *xslf)
26288{
26289 /* System generated locals */
26290 double ret_val;
26291
26292 /* Local variables */
26293 extern double swv_mpmf87s93__(double , double , double *
26294 , double *, double *, double *, double *,
26295 double *, double *);
26296 extern double swv24_(double , double ,
26297 double *, double *, double *, double *,
26298 double *, double *, double *);
26299
26300 ret_val = 0.;
26301
26302/* CKD2.4 CONTINUUM */
26303 if (ivc == 2 && *w_wv__ > 0.) {
26304/* CNT_SLF_WV CKD2.4 */
26305 ret_val = swv24_(wn, t, t0, w_wv__, rft, xn, xn_wv__, xn0, xslf);
26306 }
26307
26308 if (ivc == 3 && *w_wv__ > 0.) {
26309/* MPMf87s93 CKD2.4 CONT. */
26310/* CNT_SLF_WV */
26311 ret_val = swv_mpmf87s93__(wn, t, t0, w_wv__, rft, xn, xn_wv__, xn0,
26312 xslf);
26313 }
26314
26315 return ret_val;
26316} /* swv_ */
26317
26318
26319
26320double swv24_(double wn, double t, double *t0, double *
26321 w_wv__, double *rft, double * /* xn */, double *xn_wv__,
26322 double *xn0, double *xslf)
26323{
26324 /* Initialized data */
26325
26326 static double v0s1 = 0.;
26327 static double hwsq1 = 1e4;
26328 static double betas1 = 1e-4;
26329 static double factrs1 = .688;
26330 static double v0s2 = 1050.;
26331 static double hwsq2 = 4e4;
26332 static double factrs2 = -.2333;
26333 static double v0s3 = 1310.;
26334 static double hwsq3 = 14400.;
26335 static double betas3 = 5e-6;
26336 static double factrs3 = -.15;
26337
26338 /* System generated locals */
26339 double ret_val, d__1, d__2;
26340
26341 /* Local variables */
26342 double sfac;
26343 extern double xlgr_(double *, double *);
26344 int j;
26345 double x[4], xf, vs2, vs4;
26346
26347/* ---UNITS(CM**3/MOL)*1.E-20 */
26348
26349 j = (int) ((wn - sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).v1) / sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).dv) + 1;
26350 d__1 = s260a_1(*(struct s260a_1_ *) &s260a_).swv260[j - 2] / sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j - 2];
26351 d__2 = (t - *t0) / (260. - *t0);
26352 x[0] = sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j - 2] * pow(d__1, d__2);
26353 d__1 = s260a_1(*(struct s260a_1_ *) &s260a_).swv260[j - 1] / sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j - 1];
26354 d__2 = (t - *t0) / (260. - *t0);
26355 x[1] = sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j - 1] * pow(d__1, d__2);
26356 d__1 = s260a_1(*(struct s260a_1_ *) &s260a_).swv260[j] / sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j];
26357 d__2 = (t - *t0) / (260. - *t0);
26358 x[2] = sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j] * pow(d__1, d__2);
26359 d__1 = s260a_1(*(struct s260a_1_ *) &s260a_).swv260[j + 1] / sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j + 1];
26360 d__2 = (t - *t0) / (260. - *t0);
26361 x[3] = sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j + 1] * pow(d__1, d__2);
26362 xf = (wn - (sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).v1 + sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).dv * (double) (j - 1))) /
26363 sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).dv;
26364 sfac = 1.;
26365/* Computing 2nd power */
26366 d__1 = wn - v0s1;
26367 vs2 = d__1 * d__1;
26368 vs4 = vs2 * vs2;
26369/* Computing 2nd power */
26370 d__1 = wn;
26371 sfac *= factrs1 * (hwsq1 / (d__1 * d__1 + betas1 * vs4 + hwsq1)) + 1.;
26372/* Computing 2nd power */
26373 d__1 = wn - v0s2;
26374 vs2 = d__1 * d__1;
26375 sfac *= factrs2 * (hwsq2 / (vs2 + hwsq2)) + 1.;
26376/* Computing 2nd power */
26377 d__1 = wn - v0s3;
26378 vs2 = d__1 * d__1;
26379 vs4 = vs2 * vs2;
26380 sfac *= factrs3 * (hwsq3 / (vs2 + betas3 * vs4 + hwsq3)) + 1.;
26381 ret_val = *w_wv__ * *rft * (*xn_wv__ / *xn0) * xlgr_(&xf, x) * 1e-20 *
26382 sfac * *xslf;
26383
26384 return ret_val;
26385} /* swv24_ */
26386
26387double swv_mpmf87s93__(double wn, double t, double *t0,
26388 double *w_wv__, double *rft, double * /* xn */, double *
26389 xn_wv__, double *xn0, double *xslf)
26390{
26391 /* System generated locals */
26392 double ret_val, d__1, d__2;
26393
26394 /* Local variables */
26395 double sfac;
26396 extern double xlgr_(double *, double *);
26397 int j;
26398 double x[4], xf;
26399
26400/* ---UNITS(CM**3/MOL)*1.E-20 */
26401
26402 j = (int) ((wn - sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).v1) / sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).dv) + 1;
26403 d__1 = s260a_1(*(struct s260a_1_ *) &s260a_).swv260[j - 2] / sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j - 2];
26404 d__2 = (t - *t0) / (260. - *t0);
26405 x[0] = sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j - 2] * pow(d__1, d__2);
26406 d__1 = s260a_1(*(struct s260a_1_ *) &s260a_).swv260[j - 1] / sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j - 1];
26407 d__2 = (t - *t0) / (260. - *t0);
26408 x[1] = sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j - 1] * pow(d__1, d__2);
26409 d__1 = s260a_1(*(struct s260a_1_ *) &s260a_).swv260[j] / sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j];
26410 d__2 = (t - *t0) / (260. - *t0);
26411 x[2] = sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j] * pow(d__1, d__2);
26412 d__1 = s260a_1(*(struct s260a_1_ *) &s260a_).swv260[j + 1] / sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j + 1];
26413 d__2 = (t - *t0) / (260. - *t0);
26414 x[3] = sh2oa_1(*(struct sh2oa_1_ *) &sh2oa_).swv296[j + 1] * pow(d__1, d__2);
26415 xf = (wn - (sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).v1 + sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).dv * (double) (j - 1))) /
26416 sh2ob_1(*(struct sh2ob_1_ *) &sh2ob_).dv;
26417 sfac = 3.;
26418 ret_val = *w_wv__ * *rft * (*xn_wv__ / *xn0) * xlgr_(&xf, x) * 1e-20 *
26419 sfac * *xslf;
26420
26421/* L999: */
26422 return ret_val;
26423} /* swv_mpmf87s93__ */
26424
26425/* --- N2 continuum ------------------------------------------------------- */
26426double conti_n2__(double wn, double t, double *t0,
26427 double *w_n2__, double *rft, double *rhofac, double *
26428 xcn2)
26429{
26430 /* Initialized data */
26431
26432 static double v1 = -10.;
26433 static double dv = 5.;
26434 static double ct296[73] = { 4.303e-7,4.85e-7,4.979e-7,4.85e-7,
26435 4.303e-7,3.715e-7,3.292e-7,3.086e-7,2.92e-7,2.813e-7,2.804e-7,
26436 2.738e-7,2.726e-7,2.724e-7,2.635e-7,2.621e-7,2.547e-7,2.428e-7,
26437 2.371e-7,2.228e-7,2.1e-7,1.991e-7,1.822e-7,1.697e-7,1.555e-7,
26438 1.398e-7,1.281e-7,1.138e-7,1.012e-7,9.078e-8,7.879e-8,6.944e-8,
26439 6.084e-8,5.207e-8,4.54e-8,3.897e-8,3.313e-8,2.852e-8,2.413e-8,
26440 2.045e-8,1.737e-8,1.458e-8,1.231e-8,1.031e-8,8.586e-9,7.162e-9,
26441 5.963e-9,4.999e-9,4.226e-9,3.607e-9,3.09e-9,2.669e-9,2.325e-9,
26442 2.024e-9,1.783e-9,1.574e-9,1.387e-9,1.236e-9,1.098e-9,9.777e-10,
26443 8.765e-10,7.833e-10,7.022e-10,6.317e-10,5.65e-10,5.1e-10,
26444 4.572e-10,4.115e-10,3.721e-10,3.339e-10,3.005e-10,2.715e-10,
26445 2.428e-10 };
26446 static double ct220[73] = { 4.946e-7,5.756e-7,5.964e-7,5.756e-7,
26447 4.946e-7,4.145e-7,3.641e-7,3.482e-7,3.34e-7,3.252e-7,3.299e-7,
26448 3.206e-7,3.184e-7,3.167e-7,2.994e-7,2.943e-7,2.794e-7,2.582e-7,
26449 2.468e-7,2.237e-7,2.038e-7,1.873e-7,1.641e-7,1.474e-7,1.297e-7,
26450 1.114e-7,9.813e-8,8.309e-8,7.059e-8,6.068e-8,5.008e-8,4.221e-8,
26451 3.537e-8,2.885e-8,2.407e-8,1.977e-8,1.605e-8,1.313e-8,1.057e-8,
26452 8.482e-9,6.844e-9,5.595e-9,4.616e-9,3.854e-9,3.257e-9,2.757e-9,
26453 2.372e-9,2.039e-9,1.767e-9,1.548e-9,1.346e-9,1.181e-9,1.043e-9,
26454 9.11e-10,8.103e-10,7.189e-10,6.314e-10,5.635e-10,4.976e-10,
26455 4.401e-10,3.926e-10,3.477e-10,3.085e-10,2.745e-10,2.416e-10,
26456 2.155e-10,1.895e-10,1.678e-10,1.493e-10,1.31e-10,1.154e-10,
26457 1.019e-10,8.855e-11 };
26458
26459 /* System generated locals */
26460 double ret_val, d__1, d__2;
26461
26462 /* Local variables */
26463 extern double xlgr_(double *, double *);
26464 int j;
26465 double x[4], xf;
26466
26467/* TKS INTEGER NPTCONTN2 */
26468/* TKS INTEGER NPTCONTN2B */
26469/* TKS & V1B,V2B,DVB */
26470/* TKS DATA V2 / 350.0 / */
26471/* TKS DATA NPTCONTN2 / 73 / */
26472/* TKS DATA V1B, V2B, DVB, NPTCONTN2B / -10., 350., 5.0, 73 / */
26473
26474
26475
26476/* TKS -- begin implementation of TKS */
26477 if (wn <= 0.) {
26478 ret_val = 0.;
26479 return ret_val;
26480 }
26481 if (wn > 350.) {
26482 ret_val = 0.;
26483 return ret_val;
26484 }
26485/* TKS -- end implementation of TKS */
26486
26487 if (*w_n2__ == 0.) {
26488 ret_val = 0.;
26489 return ret_val;
26490 }
26491
26492 j = (int) ((wn - v1) / dv) + 1;
26493 d__1 = ct296[j - 2] / ct220[j - 2];
26494 d__2 = (t - *t0) / (220. - *t0);
26495 x[0] = ct296[j - 2] * pow(d__1, d__2);
26496 d__1 = ct296[j - 1] / ct220[j - 1];
26497 d__2 = (t - *t0) / (220. - *t0);
26498 x[1] = ct296[j - 1] * pow(d__1, d__2);
26499 d__1 = ct296[j] / ct220[j];
26500 d__2 = (t - *t0) / (220. - *t0);
26501 x[2] = ct296[j] * pow(d__1, d__2);
26502 d__1 = ct296[j + 1] / ct220[j + 1];
26503 d__2 = (t - *t0) / (220. - *t0);
26504 x[3] = ct296[j + 1] * pow(d__1, d__2);
26505 xf = (wn - (v1 + dv * (double) (j - 1))) / dv;
26506 ret_val = xlgr_(&xf, x) * 1e-20 * (*w_n2__ / .26867775 * *rft * *rhofac) *
26507 *xcn2;
26508
26509 return ret_val;
26510} /* conti_n2__ */
26511
26512/* --- 4 points Lagrange interpolation ----------------------------------- */
26513double xlgr_(double *xf, double *x)
26514{
26515 /* System generated locals */
26516 double ret_val;
26517
26518 /* Local variables */
26519 double a[4], b;
26520
26521
26522
26523
26524/* with continous derivatives */
26525 /* Parameter adjustments */
26526 --x;
26527
26528 /* Function Body */
26529 b = *xf * .5 * (1. - *xf);
26530 a[0] = -b * (1. - *xf);
26531 a[1] = 1. - (3. - *xf * 2.) * *xf * *xf + b * *xf;
26532 a[2] = (3. - *xf * 2.) * *xf * *xf + b * (1. - *xf);
26533 a[3] = -(b * *xf);
26534 ret_val = a[0] * x[1] + a[1] * x[2] + a[2] * x[3] + a[3] * x[4];
26535
26536/* L999: */
26537 return ret_val;
26538} /* xlgr_ */
26539
26540/* --- initializations ---------------------------------------------------- */
26541int initi_(double p, double t, double *radct,
26542 double *t0, double *p0, double *w_wv__, double *
26543 w_o2__, double *w_n2__, double *w_other__, double *xn0,
26544 double *xn, double *xn_wv__, double *rhofac)
26545{
26546 /* Initialized data */
26547
26548 static double wvmolmass = 18.016;
26549 static double drymolmass = 28.97;
26550
26551 double wdry, ratiomix, wvpress;
26552
26553/* [K] */
26554 *t0 = 296.;
26555/* [hPa] */
26556 *p0 = 1013.25;
26557
26558/* [K/cm-1] */
26559 *radct = consts_1(*(struct consts_1_ *) &consts_).planck * consts_1(*(struct consts_1_ *) &consts_).clight / consts_1(*(struct consts_1_ *) &consts_).boltz;
26560 *xn0 = *p0 / (consts_1(*(struct consts_1_ *) &consts_).boltz * *t0) * 1e3;
26561 *xn = p / (consts_1(*(struct consts_1_ *) &consts_).boltz * t) * 1e3;
26562 wdry = *w_o2__ + *w_n2__ + *w_other__;
26563 ratiomix = *w_wv__ * wvmolmass / (wdry * drymolmass);
26564 wvpress = ratiomix / (ratiomix + wvmolmass / drymolmass) * p;
26565 *xn_wv__ = wvpress / (consts_1(*(struct consts_1_ *) &consts_).boltz * t) * 1e3;
26566 *rhofac = *w_n2__ / (wdry + *w_wv__) * (p / *p0) * (273.15 / t);
26567
26568/* L999: */
26569 return 0;
26570} /* initi_ */
26571
26572/* ############################################################################ */
26573/* ---Block data to be consistent with LBLRTM/LBLATM */
26574/* Subroutine */ int phys_consts__(void)
26575{
26576 return 0;
26577} /* phys_consts__ */
26578
26579
26580/* Pi was obtained from PI = 2.*ASIN(1.) */
26581/* --------------------------------------------- */
26582/* Constants from NIST 01/11/2002 */
26583/* --------------------------------------------- */
26584/* --------------------------------------------- */
26585/* units are generally cgs */
26586/* The first and second radiation constants are taken from NIST. */
26587/* They were previously obtained from the relations: */
26588/* RADCN1 = 2.*PLANCK*CLIGHT*CLIGHT*1.E-07 */
26589/* RADCN2 = PLANCK*CLIGHT/BOLTZ */
26590/* --------------------------------------------- */
26591
26592/* ############################################################################ */
26593/* Subroutine */ int bsa296_(void)
26594{
26595 return 0;
26596} /* bsa296_ */
26597
26598
26599
26600
26601
26602
26603
26604/* Subroutine */ int bsb296_(void)
26605{
26606 return 0;
26607} /* bsb296_ */
26608
26609
26610
26611
26612
26613
26614
26615/* ---------------------------------------------------------------------------- */
26616
26617
26618/* Subroutine */ int bs260a_(void)
26619{
26620 return 0;
26621} /* bs260a_ */
26622
26623
26624
26625
26626
26627
26628
26629
26630/* Subroutine */ int bs260b_(void)
26631{
26632 return 0;
26633} /* bs260b_ */
26634
26635
26636
26637
26638
26639
26640
26641/* ---------------------------------------------------------------------------- */
26642
26643
26644/* Subroutine */ int bfh2oa_(void)
26645{
26646 return 0;
26647} /* bfh2oa_ */
26648
26649
26650
26651
26652
26653
26654
26655
26656/* Subroutine */ int bfh2ob_(void)
26657{
26658 return 0;
26659} /* bfh2ob_ */
26660
26661
26662// ---------------------- end of monortm CKD F77 code --------------------------